mybatis源码阅读之SqlSessionFactory创建

来源:互联网 发布:php验证码源代码 编辑:程序博客网 时间:2024/06/16 07:58

很早就学习了mybatis,但是一直没有对mybatis有深入的研究,最近看了mybatis的使用文档,准备研究下mybatis的底层实现。推荐大家看看这个专栏:
深入了解Mybatis原理

1.先来看看代码上是如何创建SqlSessionFactory
这里写图片描述

  • 读取配置文件mybatis-config.xml,变成输入流。
  • SqlSessionFactory的创建者SqlSessionFatoryBuilder通过build()方法创建SqlSessionFactory

2.SqlSessionFactory创建过程
这里写图片描述
图我是使用http://www.draw.io在线画图构建的。
在我的github上有http://www.draw.io可以直接导入的xml文件或是直接下载查看的图片。
图片的地址:https://github.com/bluesnail95/UML/tree/master/MyBatis

3.各片段源码分析
(1)在1中的new SqlSessionFactoryBuilder().build(inputStream)调用的是SqlSessionFactoryBuilder类中的以下方法。
这里写图片描述

(2)调用重载方法build()初始化Configuration
这里写图片描述

(3)XMLConfigBuilder
这里写图片描述

调用XPathParser的构造方法创建配置文件输入流的Document
这里写图片描述

这里写图片描述

XMLConfigBuilder调用父类的构造方法创建了Configuration
这里写图片描述

这里写图片描述

(2)中的parser.evalNode(“/configuration”)获取的是在mybatis-config.xml中的configuration元素。然后调用parseConfiguration()方法解析configuration元素下的其他子元素,包括properties,settings,mappers等等。
这里写图片描述

解析configuation元素过程
这里写图片描述

(4)解析完xml,初始化Configuration之后,创建DefaultSqlSessionFactory。这个也是最终我们用来创建SqlSession的工厂。
这里写图片描述