一级缓存命中场景

我们都知道,mybatis有一级缓存(自动)和二级缓存(需要手动配置),一级缓存在BaseExecutor中默认实现,那在哪些场景中我们的一级缓存才会命中呢,大致分为如下几点:

  1. sql参数是相同的(参数不一样不走缓存)
  2. 必须是相同的statementId,也就是sql语句的id要一样(语句不一样不走缓存,本来也不是同个东西)
  3. sqlSession必须一样,也就是要在相同的会话内。(如果新产生了个会话则缓存失效)
  4. rowBounds 分页返回的范围必须相同(分页条件不一致导致结果集不一致所以不走缓存)
  5. 没有进行手动清空缓存(没有手动调用session.clearCache()方法情况缓存)
  6. 没有调用加了注解flushCache=true的查询方法(在mapper方法中没有加上@Options(flushCache =
    Options.FlushCachePolicy.TRUE)
  7. 没有执行update语句方法(在会话内每执行一次update的操作,都会去刷新缓存,避免数据不一致)
  8. 缓存的作用域不是STATEMENT(可在配置文件中setting配置localCacheScope=STATEMENT),如果配置成了STATEMENT,缓存只会在改statement里面的嵌套查询中生效
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值