Mybatis缓存

1、一级缓存

        mybatis默认开启了一级缓存,一级缓存是在SqlSession层面进行缓存的。即,同一个SqlSession,多次调用同一个Mapper和同一个方法的同一个参数,只会进行一次数据库查询,然后把数据缓存到缓冲区,以后直接从缓存中取出数据,不会直接去查数据库。

        但是不同的SqlSession对象,因为不用的SqlSession都是相互隔离的,所以相同的Mapper、方法和参数,他还是会再次发送到SQL到数据库去执行,返回结果。一级缓存会在进行增、删、改操作时进行清除。

2、二级缓存

mybatis中的二级缓存时mapper级别的缓存,值得注意的是,不同的mapper都有一个二级缓存,也就是说不同的mapper之间的二级缓存是互不影响的。


1、sqlSession1去查询用户id为1的用户信息,查询到用户信息会将查询数据存储到该UserMapper的二级缓存中。
2、如果SqlSession3去执行相同 mapper下sql,执行commit提交,则会清空该UserMapper下二级缓存区域的数据。
3、sqlSession2去查询用户id为1的用户信息,去缓存中找是否存在数据,如果存在直接从缓存中取出数据。

        缓存的执行原理和前面提到的一级缓存是差不多的,二级缓存与一级缓存的区别在于二级缓存的范围更大,多个sqlSession可以共享一个mapper中的二级缓存区域。mybatis是如何区分二级缓存区域呢?它是按照不同mapper有不同的namespace来区分的,也就是说,如果两个mapper的namespace相同,即使是两个mapper,那么这两个mapper中执行的sql查询到数据也将存在相同的二级缓存区域中。二级缓存默认是会在执行update、insert和delete语句时进行清空的。

3、二级缓存设计及二级缓存工作模式




参考:

https://blog.csdn.net/eson_15/article/details/51669608

https://www.cnblogs.com/sword-successful/p/7468754.html

https://blog.csdn.net/u010643307/article/details/70148723

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值