一级缓存
即session缓存,作用域为 Session,当 Session flush 或 close 之后,该Session中的所有 Cache 就将清空,默认开启。
注意 集成spring(使用mybatis-spring)时:
- 每次查询spring会重新创建SqlSession,所以一级缓存是不生效的。
- 而当开启事务时,spring会使用同一个SqlSession做查询,所以这个情况下一级缓存是生效的
二级缓存
即全局缓存,其作用域为 Mapper(Namespace),默认关闭。
如何取消一级缓存
虽然一级缓存带来了性能的提升,但是有时也会造成数据的不准确,而且大部分情况下一级缓存是默认开启的,下面是两个主动关闭一级缓存的方法:
- 1.把查询提前到事务之前(之外),这样只解决了个别问题,解决并不彻底。
- 2.在mybatis的mapper xml里配置每次清空缓存flushCache = true:
<select id="selectById" resultType="ClassA" flushCache="true">
...
</select>
```