MyBatis详解(二)

MyBatis执行Sql的流程分析

【1】基于前面已经将XML文件进行build解析了并且返回了SqlSessionFactory

【1.1】那么分析SqlSessionFactory.openSession()方法是怎么返回SqlSession的,且SqlSession又是什么东西:

【1.1.1 】分析newExecutor方法中执行器的产生:

【1.1.1.1】图示:

【1.1.2 】分析底层如何执行JDBC【 User user = (User)session.selectOne(“com.mapper.UserMapper.selectById”, 1);

【1.1.2.0 】分析两种方法的本质:

【1.1.2.1 】如果是定义了二级缓存,那么会走CachingExecutor逻辑:

【1.1.2.1.1 】 事务的TransactionalCacheManager

【1.1.2.1.1.1 】它存在的意义在于:避免事务不成功的sql语句填充到了Cache里面,淘汰掉一些已经执行过的语句,相当于包装了一层。

【1.1.2.1.1.2 】存储的地方:本质上会先存在自身类的属性值private final Map

【1.1.2.1.1.3 】当成功后才会提交到PerpetualCache里面。

【1.1.2.1.2 】分析语句的解析【 ms.getBoundSql(parameterObject)】:

【1.1.2.2 】如果没有定义的话,则会选择BaseExecutor的三个子类中的一个【但其实还是会走BaseExecutor的逻辑】:

【1.1.2.3 】分析queryFromDatabase方法:

【2 .2 】对于执行器Executor的分析,先分析接口的定义:

Original: https://www.cnblogs.com/chafry/p/16913423.html
Author: 忧愁的chafry
Title: MyBatis详解(二)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/796886/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球