总结
这里将总结放到前面的目的就是希望读者可以先了解整个的流程和重要代码的意义,以免在具体看的时候迷失方向
其实创建
SqlSession的过程主要是创建Executor实例在这个过程中还是希望读者可以跟随本文打断点亲自看下源码,体会很更深些
SqlSession 初始化过程时序图

Configuration:保存configuration配置文件中所有的配置文件DefaultSqlSessionFactory创建SqlSession的工厂类Executor是执行增删改查等方法最基础的方法,底层执行增删改查还是要调用Executor的类的方法的实现
简单的运行代码
由于是看源码,这里的只有两个查询方法和非常简单的配置
全局配置文件

mapper 接口

mapper 配置文件

测试类

测试类中的
openSession()处打断点,作为程序的入口
断点走走
调用 openSession() 方法

注意! 这里的的代码在
DefaultSqlSessionFactory中47行处调用当前类中的
openSessionFromDataSource方法, 接下来进入openSessionFromDataSource方法
一个很重要的方法 openSessionFromDataSource

为什么说这是一个很重要的方法呢?因为这个方法概括了创建
SqlSession都做了哪些工作。94、95行创建事务管理器
96行是最核心的一个步骤,创建
Executor对象97行创建
DefaultSqlSession对象,也就是SqlSession接口的实现类那接下来就进入96行看看到底是怎么创建的
Executor
创建对象 Executor
首先我们看下 Executor 是干什么用的

由
Executor的方法可以看出,它是执行增删改查等方法最基础的方法,底层执行增删改查还是要调用Executor的类的方法的实现

进入
newExecutor方法首先看下参数
ExecutorType是从一开始就跟着我们到了这里,到底是干什么的

ExecutorType是一个枚举类,分别表示 批量模式,简单模式,可重用处理模式, 不同模式适合不同的场景我们这里是
simple简单模式知道了
ExecutorType是干什么的,我们接着看newExecutor方法541 - 549 行主要是判断创建那种模式的
ExecutorType551行,如果有使用二级换从则创建使用二级缓存的
Executor,其实只是用CachingExecutor包装了的executor对象,只是在执行查询的时候会先去缓存中查询553 行,执行所有插件的拦截器对
executor进行处理到这里
executor对象创建完成了(最重要的东西创建完成了)那我们再回到
DefaultSqlSessionFactory中
返回 DefaultSqlSessionFactory

返回最初
DefaultSqlSessionFactory中的openSessionFromDataSource方法97行,将 整个mybatis生命周期都很重要的
configuration和创建SqlSession很重要的executor对象 作为创建DefaultSqlSession的参数构造DefaultSqlSession并作为SqlSession的实例返回