Mybatis中的一级缓存和二级缓存

在B站学习Mybatis框架时关于一级缓存和二级缓存的个人理解与总结

为什么要用缓存?
比如我们想要查询数据库的某表,第一次调用之后,如果有缓存的话,第二次想再次使用该结果集时就不用再做连接数据库等一系列操作,可以从缓存中直接拿来用

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


当我们用同一个SqlSession创建用户对象时
在这里插入图片描述
执行结果为true,这就体现了Mybatis中的一级缓存。
在这里插入图片描述


如:
调用close()方法:

清空缓存sqlSession.clearCache();
在这里插入图片描述
调用更新方法:
在这里插入图片描述
以上过程的结果都为false

二级缓存:
它指的是Mybatis中SqlSessionFactory对象的缓存。由同一个SqlSessionFactory对象创建的SqlSession共享其缓存。
sqlsession1,2,3共享缓存内容。
在这里插入图片描述
但当我们用同一个SqlSessionFactory创建的两个sqlsession对象执行时
在这里插入图片描述
发现结果为false
在这里插入图片描述
原因是此时还没二级缓存的概念,二级缓存没使用

二级缓存的使用步骤:
第一步:让Mybatis框架支持二级缓存(在SqlMapConfig.xml中配置)
第二步:让当前的映射文件支持二级缓存(例:在IUserDao.xml中配置)
第三步:让当前的操作支持二级缓存(例:在select标签中配置)
一、
在这里插入图片描述
二、三
在这里插入图片描述
配置完之后我们再次执行发现,与第一次不同的是第二次是从缓存中获取:
在这里插入图片描述
但是结果仍为false:
在这里插入图片描述
原因为:存的是如黑色区域的数据,当第一次使用后该数据不变,第二次使用时会创建一个新的用户对象,并把数据存放到新的用户对象里面去,因为会创建一个新的用户对象,所以地址就不是同一个了。如下图所示
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值