MyBatis缓存笔记

一级缓存,sqlSession级别的缓存

一级缓存失效:

  1. sqlSession不同
  2. 查询条件不同
  3. sqlSession相同,两次查询期间执行了增删改,可能对当前数据有影响
  4. 调用了sqlSession.clearCache()

二级缓存,基于namespace级别的缓存,一个mapper.xml对应一个namespace

机制:

  1. 一个会话sqlSession,查询一条记录,这个记录会保存到一级缓存中
  2. 如果会话关闭,一级缓存的记录会保存到二级缓存中

配置:



    

eviction缓存回收策略:
 LRU:最近最少使用,移除最长时间不被使用的对象,默认
 FIFIO:先进先出
 SOFT:软引用,基于GC回收机制
 WEAK:弱引用

​ flushInterval缓存刷新间隔
​  缓存多长时间清空一次,毫秒单位

​ readOnly缓存是否只读
​  true:将引用交给用户
​  false:基于序列化克隆对象给用户 默认

​ size缓存存放多少个元素

​ type自定义缓存全类名,因为mybatis不是专业做缓存的,可以自定义缓存实现类,实现Cache接口,POJO需要实现序列化接口

缓存的配置

  1. cacheEnabled false:只关闭二级缓存

  2. useCache false:一级缓存依旧使用,不适用二级缓存