MYSQL 二次查询数据为空,关闭缓存

文章讨论了MySQL查询的缓存效果,特别是在MyBatis框架中。一级缓存局限于Session,而在Spring集成下可能不生效。二级缓存是全局性的,但默认关闭。禁用缓存可以通过配置MyBatis的cache-enabled或使用flushCache属性在查询标签中设置为true来实现。

我这边的情况是同个方法体里面有相同的两次查询,第一次查询出来有数据 ,后面就有操作删除这个集合里的数据,后面第二次查询出来就没有了,这是因为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>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值