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/
转载文章受原作者版权保护。转载请注明原作者出处!