Mybatis缓存

1.7 Mybatis中的缓存

在正式学习Mybatis的缓存之前,我们需要在心中搞懂以下三个问题:

  • 什么是缓存
    存在于内存中的临时数据
  • 为什么使用缓存
    减少和数据库的交互次数,提高执行效率
  • 什么样的数据能使用缓存
    经常查询并且不经常改变的
    数据的正确与否对最终结果影响不大
  • 什么样的数据不能使用缓存
    经常改变的数据
    数据的正确与否对最终结果影响很大的
    例如:商品的库存、银行的汇率、股市的牌价

一级缓存

一级缓存

它指的是Mybatis中SqlSession对象的缓存
当我们执行查询之后,查询的结果会同时存入到SqlSession为我们提供的一块区域中
该区域的结构是一个Map。当我们再次查询同样的数据,Mybatis会先去SqlSession中,
查询是否有,有的话直接拿去用
当SqlSession对象消失时,Mybatis的一级缓存也就消失了

一级缓存的分析

一级缓存是SqlSession范围的缓存,当调用SqlSession的修改、添加、删除、commit()、close()等
方法时,就会清空一级缓存

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CkJTGMaI-1607098563299)(Java_SSM.assets/image-20201204235706370.png)]

第一次发起查询用户id为1的用户信息,先去找缓存中是否有id为1的用户信息,如果没有,从数据库查询用户信息
如果得到用户信息,将用户信息存储到一级缓存中
如果SqlSession去执行commit操作(执行插入、更新、删除),清空SqlSession中的一级缓存,这样做的目的是为了让缓存中存储的是最新的信息,避免藏独
第二次发起查询用户信息,先去找缓存中是否有id为1的用户信息,缓存中有,则直接从缓存中获取用户信息,否则会从数据库获取数据

二级缓存


二级缓存

它指的是Mybatis中SqlSessionFactory对象的缓存。由同一个SqlSessionFactory对象创建的SqlSession共享其缓存

二级缓存的结构示意图
mark

mark[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HdpU7y2X-1607098563308)(http://holdonbei.top/blog/20201205/001412982.png)]

二级缓存的使用步骤

  1. 让Mybatis框架支持二级缓存(在SqlMapConfig.xml中配置)
  2. 让当前的映射文件支持二级缓存(在UserDao.xml中配置)
  3. 让当前的操作支持二级缓存(在select标签中配置)

mark[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6xbSg4Fq-1607098563313)(http://holdonbei.top/blog/20201205/001452672.png)]mark

二级缓存注意事项

mark

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值