MyBatis二级缓存

MyBatis的二级缓存可以通过极少的配置项实现对数据库查询数据的缓存

规则

  1. 映射文件中所有的 <select/> 语句都会被缓存
  2. 映射文件中所有的 <insert/> <update/> <delete/> 语句都会刷新缓存
  3. 基于以上两点,需要被缓存的数据库表的所有操作都应该放在同一个Mapper文件中

在MyBatis的配置文件中添加以下配置

  1. 实际上即时不在配置文件中显式的声明该配置项,MyBatis的二级缓存也是默认开启的,因为该配置项的默认值就是true
    • <setting name="cacheEnabled" value="true" />
  2. 在需要进行缓存的Mapper文件中添加以下配置
    • <cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true" />

可选配置

  1. eviction 回收策略
    1. LRU [default] 移除最长时间不被使用的对象
    2. FIFO 按对象进入缓存的顺序进行移除
    3. SOFT 移除基于垃圾回收器状态和软引用规则的对象
    4. WEAK 更积极的移除基于垃圾回收器状态和弱引用规则的对象
  2. flushInterval 刷新间隔,毫秒
    1. 没有默认值,表明没有刷新间隔,缓存只有在调用刷新语句时刷新
  3. size 引用数目
    1. 1024 [default] 存储列表集合和对象的1024个引用
  4. readOnly 只读
    1. false [default] 可读写的缓存会返回缓存对象的拷贝,性能稍差,但安全性更高
    2. true 只读的缓存会给所有调用者返回缓存对象的相同实例,所以该对象无法被修改,性能更高

可选属性

  1. useCache 让单个 <select/> 语句自行选择是否被缓存
  2. flushCache 让单个 <select/> 语句自行选择是否被刷新缓存