@testhtml
1.进入SqlSessionFactoryBuilder中build方法sql
2.进入XMLConfigBuilder类中parse->parseConfiguration中 经过该方法去解析mybatis-config.xml数据库
3.在mapperElement方法去解析咱们的<mapper resource="mybatis/UserMapper.xml"/> 咱们在导入mapper时有三种方法 resource url class缓存
4.经过parseConfiguration方法解析好的xml中的数据返回到Configuration中存储 下面为部分代码session
5.接下来在Test类中看到 咱们进入openSession方法mybatis
在openSessionFromDataSource中经过configuration.getDefaultExecutorType()传入执行器类型 默认SIMPLE(简单) reuse(复用) BATCH(批量)app
在openSessionFromDataSource方法中 去建立事物 而且得到咱们的执行器newExecutorpost
在执行器中找到咱们默认的SIMPLE 经过executor = new CachingExecutor(executor); 学习
设置一级缓存(此处默认开启一级缓存 仅用于session范围 )ui
mybatis一级缓存二级缓存学习资料(https://www.cnblogs.com/happyflyingpig/p/7739749.html)
6.接下来在Test类中看到 咱们进入selectOne方法
在MappedStatement类中去分装Mapper.xml中select属性
此时咱们经过selectList进入query 再进入getBoundSql 该方法去得到咱们的sql语句和相关的参数
在query方法中 经过createCacheKey建立缓存的key(自动缓存)
此处给sql建立一个key id+sql+limit+offsetxxx
在query返回结果中再次调用query去查咱们的缓存 key 若是为空则去数据库中查找 不然走缓存
当咱们去查数据库时经过queryFromDatabase 进入doQuery方法中
在该方法中拿到咱们上面作好的Configuration信息
进入newStatementHandler请求相关的责任链的方式(拦截器)
doQuery方法中handler调用query 此时底层调用的jdbc
此时返回resultSetHandler 数据库结果集
此时multipleResults中 存储着从数据库中查出来的数据