mybatis 缓存
MyBatis缓存
MyBatis可以非常方便地定制和配置缓存,自带两级缓存。为提高扩展性,用户可以实现MyBatis的Cache接口来定义自己缓存。
一级缓存:默认开启,基于SqlSession级别,也称为本地缓存
二级缓存:在核心配置文件中是默认开启,基于namespace级别,需要手动地在mapper.xml文件中配置<cache/>
注意点:
1、所有数据先提交到一级缓存中
2、当会话提交或关闭的时候,数据才从一级缓存转存到二级缓存中
3、二级缓存的作用域是同一个Mapper下
如何开启二级缓存?
1、在核心配置文件中使能所有的二级缓存(默认是开启的)
<setting name="cacheEnabled" value="true"/>
2、在需要使用二级缓存的Mapper.xml 配置二级缓存
<!--开启当前Mapper的二级缓存--> <cache/>
也可以对cache标签内的属性进行配置
3、别忘了将实体类序列化(实现Serializable接口)
public class User implements Serializable {//开启二级缓存,需要序列化实体类 ... }
MyBatis缓存的访问顺序
当用户需要读取数据库中的数据:
首先MyBatis先去二级缓存中查看有没有数据,
如果没有,则再去一级缓存中查找,
如果还没有,最后才去查询数据库。
MyBatis缓存
缓存也有失效的时候
1、查询了不同的数据
2、执行了增删改操作,缓存会被刷新
3、查询不同的mapper
4、手动清理了缓存
sqlSession.clearCache();
参考 https://www.bilibili.com/video/BV1NE411Q7Nx?p=29