Mybatis二级缓存问题

一、缓存介绍。

Mybatis提供了缓存服务,以减缓数据库压力;

Mybatis的查询缓存总共有两级,我们称之为一级缓存和二级缓存,如图: 

 

  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 插件就是解决这个问题的。

原文地址:https://www.cnblogs.com/jiangbaoyabo/p/15193873.html