码迷,mamicode.com
首页 > 其他好文 > 详细

Mybatis源码分析(原创)

时间:2018-08-24 10:52:44      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:app   mda   tab   ssi   caching   默认   参数   executor   span   

@test

 技术分享图片

1.进入SqlSessionFactoryBuilderbuild方法

 

技术分享图片

2.进入XMLConfigBuilder类中parse->parseConfiguration中  通过该方法去解析mybatis-config.xml

技术分享图片

技术分享图片

3.在mapperElement方法去解析我们的<mapper resource="mybatis/UserMapper.xml"/>   我们在导入mapper时有三种方法 resource url class

技术分享图片

4.通过parseConfiguration方法解析好的xml中的数据返回到Configuration中存储  下面为部分代码

技术分享图片

 

5.接下来在Test类中看到 我们进入openSession方法

 技术分享图片

在openSessionFromDataSource中通过configuration.getDefaultExecutorType()传入执行器类型 默认SIMPLE(简单)   reuse(复用) BATCH(批量)

技术分享图片

openSessionFromDataSource方法中 去创建事物 并且获得我们的执行器newExecutor技术分享图片

在执行器中找到我们默认的SIMPLE 通过executor = new CachingExecutor(executor); 

设置一级缓存(此处默认开启一级缓存 仅用于session范围 )

mybatis一级缓存二级缓存学习资料(https://www.cnblogs.com/happyflyingpig/p/7739749.html

 技术分享图片

6.接下来在Test类中看到 我们进入selectOne方法

技术分享图片

在MappedStatement类中去分装Mapper.xmlselect属性

技术分享图片

此时我们通过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 存储着从数据库中查出来的数据

Mybatis源码分析(原创)

标签:app   mda   tab   ssi   caching   默认   参数   executor   span   

原文地址:https://www.cnblogs.com/ITxiaojiayu/p/9527541.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!