一、缓存介绍。
Mybatis提供了缓存服务,以减缓数据库压力;
Mybatis的查询缓存总共有两级,我们称之为一级缓存和二级缓存,如图:
![](https://img2020.cnblogs.com/blog/1729725/202108/1729725-20210827140520474-772441667.png)
1、一级缓存是SqlSession级别的缓存。在操作数据库时需要构造 sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。
2、二级缓存是Mapper(namespace)级别的缓存。多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。
二、一级缓存
三、二级缓存。
二级缓存的颗粒度是Mapper级别;
四、二级缓存问题。
问题:当查询student表与teacher联表查询,第一次查询出来并缓存到二级缓存中,现在更新teacher表,再次查询student表与teacher联表,调取二级缓存,发现刚才更新的数据并未更新;
解决方法:当BMapper执行对BTable的update操作时,指定刷新 ACache
中的 selectATableWithJoin
语句产生的缓存;mybatis-enhanced-cache 插件就是解决这个问题的。