对 mybatis 缓存机制的理解:
Mybatis 有两级缓存,一级缓存是 SqlSession 级别的,默认开启,无法关闭;二级缓
存是 Mapper 级别的,二级缓存默认是没有开启的,但是手动开启。
1. 一级缓存:基础 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,
当 Session flush 或 close 之后,Session 中的所有 Cache 就将清空。
2. 二级缓存其存储作用域为 Mapper(Namespace),使用二级缓存属性类需要实现
Serializable 序列化接口。
3. 对于缓存数据更新机制,当某一个作用域(一级缓存Session/二级缓存 Namespaces)
的进行了 C(增加)/U(更新)/D(删除)操作后,默认该作用域下所有 select 中的缓存将被 clear.
需要在 setting 全局参数中配置开启二级缓存,如下 conf.xml 配置:
当我们的配置文件配置了 cacheEnabled=true 时,就会开启二级缓存,二级缓存是
mapper 级别的,如果你配置了二级缓存,那么查询数据的顺序应该为:二级缓存→一级缓
存→数据库。