1. 读取mybatis-config.xml的配置文件
2. 构建一个SqlSessionFactory对象
通过SqlSessionFactoryBuilder来构建一个SqlSessionFactory对象
3. 进入mybatis源码中细细解析
关键类:
1. SqlSessionFactoryBuilder --> 控制创建SqlSessionFactory的整个流程
2. XMLConfiguration --> 解析xml中的属性
3. DefaultSqlSessionFactory --> 创建SqlSessionFactory
4. Configuration --> 核心类,解析后的xml文件后的数据几乎全部都在这里
3.1 通过解析mybatis-config.xml文件来获取一个XMLConfigBuilder的实例parser
parser中存放的是mybatis-config.xml文件中configuration节点下的整个xml树的数据。
3.2 通过parser.parse()方法来把这个xml树的数据提取到Configuration的实例中。
configguration的实例在mybatis框架中是一个单例的,是框架中的核心类,毕竟很多东西都要从Configuration中获取。
3.3 创建一个SqlSessionFactory实例
终于把mybatis-config.xml和众多的sql的映射文件解析好了之后,并将对应的属性也全部都设置到Configuration中,拿到了Configuration的实例,然后可以去构造一个SqlSessionFactory实例了。
总结,这样子就完成了一个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。--> 主要是方便,但实际上用处不多。个人感觉
1.2 resultMap是一个StrictMap
这个用来存储所有映射文件xml中的resultMap节点的数据
1.3 loadedResources变量
用来存储所有的映射文件的位置,和该映射文件对应的接口的全限定名。
1.4 sqlFragments
用来存储所有的sql标签的代码片段,类似如下面的的这样子。
1.5 keyGenerators
selectKey标签个片段