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 Properties variables = 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是类型注册器,通过这段代码知道为什么可以在配置文件中配置“”这类信息了,因为通过type的值能够找到对应的类。

再看parse方法

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

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

总结

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

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

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注