我这边的情况是同个方法体里面有相同的两次查询,第一次查询出来有数据 ,后面就有操作删除这个集合里的数据,后面第二次查询出来就没有了,这是因为MYSQL有缓存存在:
一级缓存:即session缓存,作用域为 Session,当 Session flush 或 close 之后,该Session中的所有 Cache 就将清空,默认开启。注意:集成spring(使用mybatis-spring)时:
每次查询spring会重新创建SqlSession,所以一级缓存是不生效的;
而当开启事务时,spring会使用同一个SqlSession做查询,所以这个情况下一级缓存是生效的。
二级缓存:即全局缓存,其作用域为 Mapper(Namespace),默认关闭。
关闭缓存:
MyBatis没有提供一级缓存的启用、禁用开关
方法一:
mybatis:
configuration:
cache-enabled: false #禁用二级缓存
#local-cache-scope: session #一级缓存指定为session级别,在同一个 sqlSession 内,对同样的查询将不再查询数据库,直接从缓存中获取。
local-cache-scope: statement #一级缓存指定为statement级别,每次查询结束都会清掉一级缓存,实际效果就是禁用了一级缓存;
方法二: 添加flushCache="true"
<select id="getDeptList" resultMap="getDeptListMap" flushCache="true">
select * from ward
</select>
文章讨论了MySQL查询的缓存效果,特别是在MyBatis框架中。一级缓存局限于Session,而在Spring集成下可能不生效。二级缓存是全局性的,但默认关闭。禁用缓存可以通过配置MyBatis的cache-enabled或使用flushCache属性在查询标签中设置为true来实现。
1573

被折叠的 条评论
为什么被折叠?



