Contents
  1. 1. 1.mybatis的一级缓存总结
  2. 2. 2.mybatis的二级缓存总结

1.mybatis的一级缓存总结

1.在同一个 SqlSession 中, Mybatis 会把执行的方法和参数通过算法生成缓存的键值, 将键值和结果存放在一个 Map 中, 如果后续的键值一样, 则直接从 Map 中获取数据;

2.不同的 SqlSession 之间的缓存是相互隔离的;

3.用一个 SqlSession, 可以通过配置使得在查询前清空缓存;

4.任何的 UPDATE, INSERT, DELETE 语句都会清空缓存。

2.mybatis的二级缓存总结

二级缓存存在于 SqlSessionFactory 生命周期中。

2.1 配置二级缓存
2.1.1 全局开关
在 mybatis 中, 二级缓存有全局开关和分开关, 全局开关, 在 mybatis-config.xml 中如下配置:





默认是为 true, 即默认开启总开关。

2.1.2 分开关
分开关就是说在 *Mapper.xml 中开启或关闭二级缓存, 默认是不开启的。

2.1.3 entity 实现序列化接口
public class Student implements Serializable {

private static final long serialVersionUID = -4852658907724408209L;

...

}

由于在更新时会刷新缓存, 因此需要注意使用场合:查询频率很高, 更新频率很低时使用, 即经常使用 select, 相对较少使用delete, insert, update。

缓存是以 namespace 为单位的,不同 namespace 下的操作互不影响。但刷新缓存是刷新整个 namespace 的缓存, 也就是你 update 了一个, 则整个缓存都刷新了。

最好在 「只有单表操作」 的表的 namespace 使用缓存, 而且对该表的操作都在这个 namespace 中。 否则可能会出现数据不一致的情况。

Contents
  1. 1. 1.mybatis的一级缓存总结
  2. 2. 2.mybatis的二级缓存总结