mybatis的Configuration详解

上一篇介绍了mybatis中SqlSessionFactory的创建过程,今天来学习它默认实现中的唯一属性Configuration。

回顾

还是最开始的mybatis源码环境中的测试代码如下图:

利用mybatis查出数据只用三步:创建SqlSessionFactory、通过SqlSessionFactory创建SqlSession、SqlSession执行selectOne方法

上一篇文章梳理了SqlSessionFactory创建过程的源码,发现它返回的是它的默认实现类DefaultSqlSessionFactory,而默认实现类有有唯一的一个属性configuration,所以SqlSessionFactory根本的依赖还是Configuration类。

Configuration基础信息说明

Configuration类中有很多的属性,下面是基础属性的源码以及部分说明如下图:

上面主要是一些settings属性,settings属性是MyBatis 的基础性设置,它们会改变 MyBatis 的运行时行为。更加完整的说明在官方文档上:https://mybatis.org/mybatis-3/zh/configuration.html。去掉zh可以查看英文版本。

这里面有一个熟悉protected Propertiesvariables = new Properties();这个属性对应是我们在mybatis配置文件中有时会配置的properties节点的内容,有时候我们会配置url、driver、username、password等信息。然后在其他节点使用${}来使用。

扩展属性和无参构造

上面介绍了决定mybatis一些基础行为的属性,在Configuration还存有一些mybatis可用来扩展的和运行中需要信息,下图中是这些属性已经Configuration的无参构造函数:

上一节是mybatis中的环境配置信息,而上图是一些mybatis运行中要用到的信息,比如:resultMap集合、sql语句集合、插件列表、缓存、类型别名、类型处理器等。

其中很多属性使用的是Configuration中的了一个内部静态类StrictMap,它继承自HashMap,对HashMap的装饰在于增加了put时防重复的处理,get时取不到值时候的异常处理,这样在使用时就不需要关心各种异常,简化应用层逻辑。

Configuration的无参构造函数主要往typeAliasRegistry中put了一些数据,typeAliasRegistry是类型注册器,通过这段代码知道为什么可以在配置文件中配置“<transactionManager type="JDBC"/>”这类信息了,因为通过type的值能够找到对应的类

再看parse方法

在上一篇文章SqlSessionFactory创建过程中讲到了Configuration是通过无参构造函数创建了一个Configuration对象,然后在最后调用了parse方法。无参构造函数上一节已经进行了说明,最后再来看上一篇文章最后的parse方法调用的parseConfiguration方法如下图:

这次在看parseConfiguration方法中的内容就更加清楚在干嘛了。

总结

今天只梳理了Configuration中包含的属性以及默认构造函数,分析完成后最终还是指向了上一篇文章的parseConfiguration方法,那么从下一篇文章开始就来仔细分析一下parseConfiguration对Configuration具体做了哪些设置以及流程。

Java程序员日常学习笔记,如理解有误欢迎各位交流讨论!

(0)

相关推荐

  • javascript类型系统——日期Date对象

    Date对象是javascript语言中内置的数据类型,用于提供日期和时间的操作接口.Date对象总共有三个静态方法,分别是Date.now().Date.parse().Date.UTC().这些方 ...

  • 建议收藏,mybatis插件原理详解

    回复"面试"获取全套面试资料 上次发文说到了如何集成分页插件MyBatis插件原理分析,看完感觉自己better了,今天我们接着来聊mybatis插件的原理. 插件原理分析 myb ...

  • (三)MyBatis从入门到入土——使用详解

    MyBatis使用详解 上篇我们手动开发了一个MyBatis项目,但是我们仅仅是编写了代码,对于整个项目是如何运行以及每个代码的意义都没有仔细的分析和说明,那么接下来我们就开始分析每个代码的意义以及如 ...

  • 写了10年的代码,我最怕写Mybatis这些配置,现在有详解了

    在使用 mybatis 过程中, 当手写 JavaBean和XML 写的越来越多的时候, 就越来越同意出错.这种重复性的工作, 我们当然不希望做那么多. 还好, mybatis 为我们提供了强大的代码 ...

  • spring与mybatis整合详解

    spring与mybatis整合详解 在数据库dbmis中创建student表: 建立Maven项目,创建Dao层,POJO层,Controller层,并配置Mapper.applicationCon ...

  • Mybatis的sql组装详解

    上一篇分析了SqlSession执行sql的过程,其中并没有分析sql是从哪里来的,今天就来仔细分析下. Sql来源 从上一篇的最后一步执行sql那里倒推sql的来源,源码主要过程如下图: 可以看到最 ...

  • Mybatis的SqlSession创建过程详解

    前面mybatis的初始化过程分析完成,接下来是第二步SqlSession的创建. 创建过程总览 SqlSession创建过程如下图: 创建过程还是比较简单的,首先是之前分析的SqlSessionFa ...

  • Mybatis中SqlSource解析流程详解

    前面几篇文章都在详细分析mapper的加载过程,但是始终没有看到sql的解析过程,今天来详细分析下. 解析sql的位置 前面分析到不管是通过注解还是通过xml方式生成mapper,最终都是调用Mapp ...

  • Mybatis中mapper的xml解析详解

    上一篇文章分析了mapper注解关键类MapperAnnotationBuilder,今天来看mapper的项目了解析关键类XMLMapperBuilder. 基础介绍 回顾下之前是在分析config ...

  • Mybatis中mapper相关注解解析类详解

    上一篇文章分析发现解读mapper关键是两个类MapperAnnotationBuilder和XMLMapperBuilder,今天先来看MapperAnnotationBuilder. 基础介绍 根 ...