mybatis源码分析(一,sqlSessionFactory的创建流程)

Mybatis源码流程解析

Mybatis是我们常用的orm框架之一,我们要对其内部原理有所了解。下面通过一个简单的案例对其执行流程做简单分析。如有不错误之处,请大家指点我会及时更正。

Mybatis分析准备工作

1. 需要一个数据库(mysql oracle都行只是了解原理)

2. 编写xml

 db.properties

 mybatis源码分析(一,sqlSessionFactory的创建流程)

Mybatis.xml

 mybatis源码分析(一,sqlSessionFactory的创建流程)

很简单的配置 如果想了解更多的配置细节请查阅

http://www.mybatis.org/mybatis-3/zh/index.html

3.编写java代码

 mybatis源码分析(一,sqlSessionFactory的创建流程)

一个POJO 一个mapper 和一个Test类 很简单这里就不贴了 大家可以在网上搜索一个helloworld案例

准备工作完成下边开始分析

 mybatis源码分析(一,sqlSessionFactory的创建流程)

从测试案例我们可以把源码解析分4

1. 获取sqlSessionFactory

2. 通过factory获得sqlSession

3. SqlSession获取代理类

4. 通过代理类执行

我们一步步分析首先看sqlSessionFactory创建过程都做了什么。

 mybatis源码分析(一,sqlSessionFactory的创建流程)

builde()方法打断点

进入sqlSessionFactoryBuilder build()方法(断点打到xmlConfigBuilder上)

,m

这个是xml解析获取各个节点

跟进xmlConfigBuilder类 会发现就是一个XPathParser类创建(不做过多分析)

获取xmlConfig后进行parse()方法

 mybatis源码分析(一,sqlSessionFactory的创建流程)

跟进parse()发现其实是获取mybatis.xml里的跟节点configuration

 mybatis源码分析(一,sqlSessionFactory的创建流程)


mybatis源码分析(一,sqlSessionFactory的创建流程) 

获取跟节点后通过parseConfiguration()方法对configuration进行初始化

 mybatis源码分析(一,sqlSessionFactory的创建流程)

可以看到都是根据我们的配置文件的各个节点来初始化的。继续跟进看下我们的sql 配置文件是怎么对应上的。

 mybatis源码分析(一,sqlSessionFactory的创建流程)

此方法是对我们的mappers做处理。

 mybatis源码分析(一,sqlSessionFactory的创建流程)

可以看出都是通过各自的builder类的parser()解析的继续跟进

 mybatis源码分析(一,sqlSessionFactory的创建流程)

同样是拿到根节点

 mybatis源码分析(一,sqlSessionFactory的创建流程)

获取配置的参数获取配置的每一个sql语句

 

 mybatis源码分析(一,sqlSessionFactory的创建流程)


mybatis源码分析(一,sqlSessionFactory的创建流程) 

mybatis源码分析(一,sqlSessionFactory的创建流程)

初始化MappedStatement对象把sql语句 还有相关请求参数 result参数 还有对应的返回类型全部封装到此对象中

封装完毕把mappedStatement放入configuration

 mybatis源码分析(一,sqlSessionFactory的创建流程)

同理也是把返回resultMap和缓存相关的数据放入configurtion中 最后执行build方法

sqlSessionFatoryBuilder类)

mybatis源码分析(一,sqlSessionFactory的创建流程)

 mybatis源码分析(一,sqlSessionFactory的创建流程)

 

返回一个DefaultSqlSessionFactory() 到此factory的创建分析结束

流程其实是

sqlSessionFactory().builer------->xmlConcifgBuilder------>configuration----------->defaultSqlSessionFactory()

下面是网络找到的时序图(再次感谢原作者)

下次分析 openSession

 mybatis源码分析(一,sqlSessionFactory的创建流程)