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

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

mapper 接口

mapper 配置文件

测试类

测试类中的
sqlSession.getMapper处打断点,作为程序的入口
断点走走
调用 sqlSession.getMapper

进入
sqlSession.getMapper(EmployeeMapper.class)方法看到调用的是sqlSession中
configuration的getMapper方法
调用 configuration 的 getMapper 方法

我们发现在
configuration中调用的是其属性mapperRegistry的getMapper方法,那mapperRegistry是什么呢?

实际上
mapperRegistry中存放的是接口和创建其代理的工厂的knownMappers
mapperRegistry是创建sqlSesssionFactory时创建的接下来进入
getMapper方法
MapperProxyFactory 中获取 MapperProxy 代理

正如上面所说,45 行从
knownMappers中的knownMappers中获取MapperProxyFactory50 行 从
MapperProxyFactory中获取MapperProxy对象接下来进入
MapperProxyFactory
MapperProxyFactory 中创建 MapperProxy 代理

图中51 行处创建
MapperProxy对象52 行调用46行的
newInstance方法47行调用原生的
jdk的Proxy类创建代理对象接下来进入51 行看看
MapperProx是什么
MapperProxy 代理类

图中30 行,
MapperProxy实现了 jdk 原生的代理接口实现了
invoke方法,在调用代理对象的方法时会调用invoke方法至此创建代理对象完毕,一步步将代理对象返回