mybatis的启动流程(二)-生成SqlSession

2017-08-08  本文已影响0人  guodidi

接上一节,在获取完SqlSessionFactory之后,我们希望通过SqlSessionFactory得到SqlSession

1. 获取SqlSession

1. 获取一个SqlSession

2. 进入DefaultSqlSessionFactory#openSessionFromDataSource

2. 进入openSessionFromDataSource

3. 详细解答该方法

3. 核心方法

3.1. 获取一个Environment实例

这个实例是我们在mybatis-config.xml中进行定义的

3.1.1 在mybatis-config.xml中定义了environment 3.1.2 Environment的实例

3.2 获取一个事务管理器工厂

这个事物管理器工厂来源于configuration实例中的environtment

3.2.1 获取事物管理器工厂

3.3 获取一个事物管理器

事物管理器有两种:一种是jdbc事务管理器,一种是manage事务管理器。前者使用了jdbc的提交和回滚设置,依赖于数据源得到的连接来管理事务的范围。后者则是从来不回滚和提交事务,他将控制权转交给容器来完成事务。默认情况下他会关闭连接,因此部分容器不希望关闭连接的话,需要设置closeConnection的属性值为false。如果我们使用的是spring容器,那么我们不需要配置mybatis中的事务管理器,因此spring自带的事务管理器会覆盖掉mybatis的配置。

3..3.1 从工厂中获取一个事物管理器 3.3.2 创建了一个jdbc事物管理器

3.4 创建一个Executor执行器

默认采用的executor的实例是

3.4.1 创建了一个executor执行器的实例

如果设置了开启一级缓存的话,那么我们程序会继续创建一个缓存执行器,然后将之前创建的执行器作为缓存执行器的一个代理执行器。那么当我们需要查找数据的时候,如果可以利用缓存的话,那么就先到缓存执行器中寻找数据,如果没有找到数据,才会交给代理执行器去数据库中查找数据。

3.4.2 创建了一个缓存执行器

然后将执行器丢到拦截器链中,是拦截器有机会拦截该对象

3.4.3 将执行器放入拦截器链中

由此,完成了一个执行器的实例操作。

3.5 打开SqlSession

3.5 实例化一个SqlSession

由此,我们完成了整个获取SqlSession的操作。

上一篇 下一篇

猜你喜欢

热点阅读