MyBatis(五)横向分析Executor中的BaseExecutor

本篇文章主要讲述的是BaseExecutor(基础执行器/一级缓存执行器),BaseExecutor的主要作用是:事务管理,执行关于一级缓存的操作
BaseExecutor的存在是有必要的,如果没有BaseExecutor,那么只能把管理事务和一级缓存下放到SimpleExecutor、ReuseExecutor、BatchExecutor中,这样的话,就会让三个子类的代码重复性太高了,于是就把这一部分相同的操作都放到了BaseExecutor上
在分析BaseExecutor的源代码时,不会再延深它的三个子类实现的方法,也就是那些以do开头的方法,都会放到下一篇去讲,本文讲述的就是加了粗体这一块的方法,query()->query()->queryFromDatabase()->doQuery()

BaseExecutor

BaseExecutor并没有CachingExecutor那么复杂,这是因为BaseExecutor的实现的一级缓存功能是比较简单的,是线程不安全的,一级缓存的存活时间是非常短暂的,所以没有必要把BaseExecutor设计的太复杂

一级缓存的命中条件

在分析BaseExecutor前,先来分析一下一级缓存的命中条件,也就是在什么情况下,一级缓存才会生效

一级缓存的命中条件分为两类:参数相关条件、操作与配置相关条件

参数相关条件

参数是指我们调用方法时,传入的参数

  1. 在同一个会话,这个就不用说了,一个SqlSession对应一个Executor,而一级缓存就存储在Executor中
  2. SQL语句、参数相同,就是我们写的SQL语句(会转换为用?作为占位符的),我们写的参数会另外存储
  3. StatementId相同

你可能感兴趣的:(MyBatis源码分析)