MyBatis的二级缓存

MyBatis的二级缓存

MyBatis默认是开启一级缓存的

MyBatis默认开启了一级缓存,但是它的一级缓存的作用域是同一个SqlSession对象,就是说只有当两个sql语句完全一样,并且都是通过同一个SqlSession对象操作数据库的时候,MyBatis的一级缓存才会生效,当执行一个和前面完全一样的sql语句的时候,这样就不会重新连接数据库从磁盘中取数据了,而是从一级缓存中(内存中)直接取数据。

但是一级缓存不实用,因为我们调用同一个动态代理接口的方法的时候,每次调用一个方法无论相同不相同都会重新创建一个SqlSession对象。因此我们在实际项目中基本上用不到一级缓存,如果想要提高数据库的查询性能,需要用二级缓存。

开启MyBatis的二级缓存

为什么要开启二级缓存

为什么要开启MyBatis的二级缓存呢?看下面的这个图:

在这里插入图片描述

就是当调用同一个动态代理接口的同一个方法两次的时候,其实是会创建两个SqlSession对象操作数据库,所以一级缓存是不起作用的,这个时候我们就需要开启二级缓存了。

在mybatis的配置文件中进行配置

在这里插入图片描述

在对应的mapper映射文件中声明

想要给哪个动态代理接口开启二级缓存,就在哪个对应的mapper映射文件中声明一下,如下图:

在这里插入图片描述

相关的DO对象需要实现序列化

在这里插入图片描述

测试

首先启动项目,然后连续访问这个项目中的/query接口两次,如下图:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

动态代理接口执行更新方法后会清空对应的二级缓存

在这里插入图片描述

比如:

goodsMapper动态代理接口相关的二级缓存中有条数据[Student:(id:1,name:“zs”)],现在我们更新了数据库中的相关数据为[Student:(id:1,name:“ls”)],那么我们假如没有清空二级缓存,下次再查询id为1的学生的时候,因为sql语句和之前的一样,那么就会去二级缓存中查找,这时候查找到的就是[Student:(id:1,name:“zs”)],但是此时这个数据是错误的,因为我们数据库中已经更新了这条数据为[Student:(id:1,name:“ls”)]。因此动态代理接口每次进行完更新操作之后都刷新二级缓存清空里面的数据,这是非常合理的。

使用二级缓存的好处

可以提高数据库的查询性能,优化数据库的查询操作,提高性能。就是,使用缓存可以把数据库的查询结果存储在内存中,这样如果下次我们进行相同的查询的时候,就不用连接数据库读取电脑磁盘中的数据了,而可以直接通过内存读取数据。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
MyBatis二级缓存是一种在多个SqlSession之间共享缓存数据的机制。它是在SqlSessionFactory级别上进行缓存的,可以跨多个SqlSession共享缓存数据。二级缓存的本质是将查询结果存储在内存中,以提高查询效率。 要启用MyBatis二级缓存,需要在MyBatis的配置文件中设置<setting name="cacheEnabled" value="true" />。默认情况下,二级缓存是关闭的,需要手动开启。 值得注意的是,使用MyBatis二级缓存时,返回的POJO必须是可序列化的,因为缓存需要将数据序列化到内存中。 需要注意的是,二级缓存是基于namespace级别的,不同的namespace拥有独立的二级缓存。当在一个namespace中进行数据修改时,会自动刷新该namespace下的所有查询缓存。而当在一个namespace中进行数据修改时,其他namespace下的查询缓存不会被刷新。因此,在使用二级缓存时,需要注意数据的一致性和缓存的刷新机制。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【MyBatisMyBatis 二级缓存全详解](https://blog.csdn.net/qq_21383435/article/details/124768956)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Mybatis二级缓存](https://blog.csdn.net/weixin_52851967/article/details/125190163)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr-X~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值