该系列文章针对 Mybatis 3.5.1 版本
Mybatis 中针对缓存的使用,可以分为:一级缓存和二级缓存。
一、二级缓存
1.1、介绍
二级缓存在 Mybatis 中默认是不开启。准确的来讲应该是二级缓存的全局配置开关是默认开启的但是想要二级缓存生效,还需要进行配置。
二级缓存的作用范围是同一个 namespace 下的mapper 映射文件内容。
多个 SqlSession 之间可以共享缓存内容。
在 Mybatis 中,SQL 查询的发起与执行的逻辑处理可以划分为核心处理层,在核心处理层中,所有执行操作的起始都是 Executor
执行器。
执行器实现类图如下
如图,所有 Executor 执行器的实现都继承了抽象父类 BaseExecutor
,同时 BaseExecutor
是一个模板抽象类,定义了 Executor 的执行结构。
针对一级缓存,一级缓存的实现在 BaseExecutor
中,所以所有的 Executor
都支持一级缓存,且一级缓存不存在开启关闭开关,只能通过两种方式来使得一级缓存失效
通过一级缓存作用域,配置 STATEMENT ,使得每次缓存存储之后,主动清除
通过
Mapper.xml
中配置flushCache=true
属性,使得每次查询前都先清除缓存,达到缓存失效的目的。
1.2、开启二级缓存
二级缓存由执行器装饰器 CachingExecutor
实现。
而