mybatis的启动流程(一)-生成SqlSessionFactory

1. 读取mybatis-config.xml的配置文件

读取配置文件

2. 构建一个SqlSessionFactory对象

创建一个SqlSessionFactory

通过SqlSessionFactoryBuilder来构建一个SqlSessionFactory对象

3.  进入mybatis源码中细细解析

关键类:

1. SqlSessionFactoryBuilder --> 控制创建SqlSessionFactory的整个流程

2. XMLConfiguration --> 解析xml中的属性

3. DefaultSqlSessionFactory --> 创建SqlSessionFactory

4. Configuration --> 核心类,解析后的xml文件后的数据几乎全部都在这里

mybatis的启动流程(一)-生成SqlSessionFactory_第1张图片
获取一个SessionFactory的主要代码

3.1 通过解析mybatis-config.xml文件来获取一个XMLConfigBuilder的实例parser

parser中存放的是mybatis-config.xml文件中configuration节点下的整个xml树的数据。

3.1.1 通过reader构造一个XMLConfiguration实例
3.1.2 进入构造函数的准备工作
mybatis的启动流程(一)-生成SqlSessionFactory_第2张图片
3.1.3 实际上的构造函数

3.2 通过parser.parse()方法来把这个xml树的数据提取到Configuration的实例中。

configguration的实例在mybatis框架中是一个单例的,是框架中的核心类,毕竟很多东西都要从Configuration中获取。

mybatis的启动流程(一)-生成SqlSessionFactory_第3张图片
3.2.1 判断文件是否重复解析
mybatis的启动流程(一)-生成SqlSessionFactory_第4张图片
3.2.2 将文件中的配置读取到Configuration的实例中

3.3 创建一个SqlSessionFactory实例

终于把mybatis-config.xml和众多的sql的映射文件解析好了之后,并将对应的属性也全部都设置到Configuration中,拿到了Configuration的实例,然后可以去构造一个SqlSessionFactory实例了。

3.3.1 默认构建一个DefautlSqlSessionFactory实例
3.3.2 通过Configuration的实例来构建

总结,这样子就完成了一个SqlSessionFactory实例的创建。

备注

这时候,我们来看看Configuration中一些关键变量值是什么

1. 1 mappedStatements是一个StrictMap(mybatis自己在HashMap上封装的)。

这个map的key有两种形式: 

1.1.1  映射文件中namescape+id  --> 全局唯一,不唯一程序直接炸错

1.1.2 取1.1 中得到最后一个句点(.)后的单词(StrictMap中叫做shortname) --> 短名字可能会重复,程序无所谓,继续跑

因此这个map的value也有两种形式:

1.2.1 如果可以保证1.1.1 和 1.1.2 的规则都是全局唯一的,那么value就是MappedStatement的实例。

1.2.2 如果1.1.2 没有办法保证是全局唯一的,那么这个短名字为key对应的value是Ambiguity的实例。

注意:如果能够保证1.1.2是全局唯一的,那么可以通过短名字来访问获取value。--> 主要是方便,但实际上用处不多。个人感觉

mybatis的启动流程(一)-生成SqlSessionFactory_第5张图片
1. mappedStatements变量

1.2 resultMap是一个StrictMap

这个用来存储所有映射文件xml中的resultMap节点的数据

mybatis的启动流程(一)-生成SqlSessionFactory_第6张图片
2. resultMap变量

1.3  loadedResources变量

用来存储所有的映射文件的位置,和该映射文件对应的接口的全限定名。

mybatis的启动流程(一)-生成SqlSessionFactory_第7张图片
3. loadedResources变量

1.4 sqlFragments

用来存储所有的sql标签的代码片段,类似如下面的的这样子。

mybatis的启动流程(一)-生成SqlSessionFactory_第8张图片
4. sql标签的代码段
5. sqlFraments(我的xml中没有这种片段,所以为0)

1.5 keyGenerators

selectKey标签个片段

selectKey片段
6.selectKey标签片段

你可能感兴趣的:(mybatis的启动流程(一)-生成SqlSessionFactory)