Mybatis一级缓存和二级缓存

本文介绍了缓存的使用场景,如减少重复查询和加载固定数据,以及缓存的层次顺序,一级缓存(SqlSession级别)和二级缓存(Mapper的namespace级别)。在MyBatis中,DML操作会清除一级缓存,而二级缓存则在SqlSession关闭时保存数据。二级缓存跨SqlSession共享,提高了查询效率。
摘要由CSDN通过智能技术生成

1. 什么情况下用缓存

如果在极短的时候内,做相同的查询,那么它们的结果很可能是相同,而访问一次数据库是非常消耗资源的,如果有一层缓存,将极大减少资源的消耗。

另外项目中要加载固定的某些数据,比如下拉框中加载一些不常变动的数据,又比如Tree绑定的数据不经常发生变化的,这些数据都可以写入缓存。

2.​​​​​​​ 缓存的使用顺序

二级缓存 > 一级缓存 > 数据库

3. 一级缓存

一级缓存的作用域是SqlSession范围的,当在同一个SqlSession中执行两次相同的SQL语句时,第一次执行完毕会将数据库中查询的数据写到缓存(一级内存),第二次查询时会从缓存中获取数据,不再去数据库查询,从而提高查询效率。

提示:如果SqlSession执行了DML操作(insert、update、delete),并提交到数据库,MyBatis则会清空SqlSession中的一级缓存,目的是为了保存缓存中存储的是最新的数据,避免出现脏读现象。

当一个SqlSession结束后,该SqlSession中的一级缓存也就不存在了。

 

4. 二级缓存

二级缓存存在于SqlSessionFactory生命周期中。

二级缓存是多个sqlSession对象共享的,其作用域是Mapper的同一个namespace。不同的 SqlSession两次执行相同的namespace下的SQL语句,且向SQL中传递的参数也相同,即最终执行相同的SQL语句。则第一次执行完毕后会将数据库中查询的数据写到一级缓存(内存),第二次查询时会从缓存中获取数据,不再去数据库查询。

要关闭sqlsession,才会把数据保存到二级缓存

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值