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缓存
二级缓存
它指的是Mybatis中SqlSessionFactory对象的缓存。由同一个SqlSessionFactory对象创建的SqlSession共享其缓存
二级缓存的结构示意图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HdpU7y2X-1607098563308)(http://holdonbei.top/blog/20201205/001412982.png)]
二级缓存的使用步骤
- 让Mybatis框架支持二级缓存(在SqlMapConfig.xml中配置)
- 让当前的映射文件支持二级缓存(在UserDao.xml中配置)
- 让当前的操作支持二级缓存(在select标签中配置)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6xbSg4Fq-1607098563313)(http://holdonbei.top/blog/20201205/001452672.png)]