Mybatis的一级缓存和二级缓存

本文详细解析了MyBatis的一级缓存和二级缓存机制。一级缓存为SqlSession级别,同一SqlSession下相同查询语句将从缓存获取结果;二级缓存基于mapper文件的namespace,允许多个sqlSession共享同一缓存区域,但须注意namespace相同的不同mapper间可能产生数据过期问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3127b9a58d9b5909ede94447bf2ffc087a0.jpg

一、一级缓存

  • 一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。
  • 在同一个SqlSession下的同一条查询语句(参数也不变)会从缓存返回结果;更新语句(update、insert、delete)会刷新缓存。

 

二、二级缓存

  • 二级缓存是基于 mapper文件的namespace的,也就是说多个sqlSession可以共享一个mapper中的二级缓存区域,并且如果两个mapper的namespace相同,即使是两个mapper,那么这两个mapper中执行sql查询到的数据也将存在相同的二级缓存区域中。
  • 二级缓存基于namespace。如果一个user表,有两个不同namespace的Mapper都对其进行查询和更改,则互相不可见,容易读到过期数据。

https://www.jianshu.com/p/2be932206c59

https://blog.youkuaiyun.com/weixin_39312465/article/details/86624486

转载于:https://my.oschina.net/u/2286010/blog/3093739

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值