今天是20年的四月二号,坐标北京良乡 ,天朗气清,很想出去走走。最近公司上二休三,一周五天都是空闲的。
今天早上新闻推送,平顶山出现了几例无症状的新冠肺炎患者,估计河南完全解封又要花点时间了。
但是今天想搞清楚Mybatis的内部流程,虽然我也是比较熟悉了,但是一直也有点模糊。

先上一张图

2020-04-02 深入mybatis的工作原理
SqlsessionFactoryBuilder 根据配置或者代码来生成Sqlsessionfactory 采用分布构建的builder模式
Sqlsessionfactory : 生成SqlSession ,使用的是工厂模式
SqlSession : 一个既可以发送sql来获取返回结果 也可以获取 Mapper的接口
SqlMapper :一个Java接口和xml文件(或者注解)构成,需要给出对应的sql和映射规则,她负责发送sql去执行

查看sqlSessionfactory

2020-04-02 深入mybatis的工作原理

2020-04-02 深入mybatis的工作原理
2020-04-02 深入mybatis的工作原理

查看openSession的方法

2020-04-02 深入mybatis的工作原理
01 创建了一个事务
02 根据不同的类型 simple reuse 创建了一个Excutor 对象 并且将事务对象传入
03 调用拦截器 包装Excutor
2020-04-02 深入mybatis的工作原理
流程时序图
2020-04-02 深入mybatis的工作原理

2020-04-02 深入mybatis的工作原理

开始查询的流程

01 ProductDao mapper = sqlSession.getMapper(ProductDao.class);
02 调用Configration 的getMapper
2020-04-02 深入mybatis的工作原理
03 根据接口 使用JDK动态代理获取代理对象
2020-04-02 深入mybatis的工作原理
2020-04-02 深入mybatis的工作原理
时序图
2020-04-02 深入mybatis的工作原理

调用接口方法 (增删改查)

2020-04-02 深入mybatis的工作原理
excutor 调用seelctList
2020-04-02 深入mybatis的工作原理
2020-04-02 深入mybatis的工作原理

2020-04-02 深入mybatis的工作原理
首先在在缓存中取值 没有的话 调用queryFromDatabase
2020-04-02 深入mybatis的工作原理

Note

2020-04-02 深入mybatis的工作原理
这个方法是对参数的解析 就是@Param(“x”)那么返回的可排序的Map的key就是x 值就是传入的值

2020-04-02 深入mybatis的工作原理
调用CacheingExcutor 的query方法
2020-04-02 深入mybatis的工作原理
首先从缓存中查询 没有从数据库查询

相关文章:

  • 2021-06-25
猜你喜欢
  • 2021-06-01
  • 2021-04-20
  • 2021-10-27
  • 2021-04-05
  • 2021-04-13
相关资源
相似解决方案