mybatis缓存机制

一级缓存

SqlSession级别缓存,作用域在一次会话之间有效,默认开启

运行原理:

  1. 第一次执行select操作完毕后,会将查询到的结果缓存到map中。
  2. 第二次执行select操作时,如果传入的参数一样,就不去查询数据库而是直接返回,这样提高了效率。

注意:

  1. 在会话结束时会自动清除缓存。
  2. 如果执行了DML操作,并且commit了,会将缓存清除,避免脏读

二级缓存

SqlSessionFactory级别缓存,作用域在同一个namespace有效,默认关闭

如何配置

  1. 在mybatis配置文件中加入

  

  1. 在mapper文件中配置
 

这里配置了一个LRU缓存,并每隔60秒刷新,最大存储512个对象,而却返回的对象是只读的

若想禁用当前select语句的二级缓存,添加useCache="false"修改如下: