Mybatis缓存理解

一级缓存

  1. 一级缓存默认启用,想要关闭一级缓存可以再select标签上配置flushCache = “true”
  2. 一级缓存存在于Sqlsession 的声明周期中,在同一个SqlSeesion中查询时,Mybatis会把执行的方法和参数通过算法生成缓存的键值,将键值和查询结果存入一个Map对象中,如果同一个SqlSession中执行的方法和参数完全一致,那么通过算法会生成相同的键值,当Map缓存对象中已经存在该键时,则会返回缓存中的对象
  3. 任何的insert,update,delete操作都会清空一级缓存

二级缓存

  1. 二级缓存以namespace为单位进行缓存,二级缓存默认开启,但是必须利用<cache></cache>标签才能开启单个namespace二级缓存

  2. 二级缓存有时会出现脏读情况,是因为不同的namespace中相同的查询所致,每当进行update,delete,insert操作时,会以namespace为单位清空缓存

     当具有数据连接时,sqlSession会先访问二级缓存(如果二级缓存开启的情况下),如果二级缓存开启并其中具有相应缓存则返回,如果没有命中或二级缓存没有开启,则在一级缓存中找寻数据,如命中,直接返回,反之查询数据库
注意点:当mybatis与spring或者springboot结合时,在不开启事务的情况下,一级缓存也不会生效,只有当开启事务,或者方法具有事务注解时,才会启用一级缓存
原因:当mybaits与spring或springboot结合时,再不开启事务的情况下,每次执行sql语句都会启用新的session连接,一级缓存得是再同一次session中才会生效,故而一级缓存不会生效,但如果开启事务,则所有sql操作将会视为一次连接,同一次提交,所以会命中缓存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值