面试官:Mybatis一级缓存和二级缓存同时开启,先查询哪个缓存?

这篇博客深入探讨了Mybatis的一级缓存和二级缓存,通过实验展示了它们的工作原理和生命周期。一级缓存位于SqlSession内部,生命周期与SqlSession相同,而在同一个SqlSession内,修改操作会导致一级缓存失效。二级缓存基于namespace,跨SqlSession共享,但多表查询可能导致脏数据问题。在查询时,Mybatis会先查找二级缓存,再查一级缓存。

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

在这里插入图片描述

介绍

要想回答这个问题,必须把一级缓存和二级缓存的实现搞明白,详细介绍一下

我们知道Mybatis有一级缓存和二级缓存,底层都是用HashMap实现的
key为CacheKey对象(后续说原因),value为从数据库中查出来的值。

Mybatis的二级缓存模块是装饰器的典型实现,不清楚装饰者模式的看如下文章

面试官:说一下装饰者模式的作用,以及哪些地方用到了装饰者模式吧

画一个简易的装饰者模式类图
在这里插入图片描述

Component(组件):组件接口或抽

MyBatis二级缓存是指在实际工作中一般不会使用的缓存机制。然而,有些面试官可能会问到这个问题,所以我们还是需要了解一下。引用 要开启MyBatis二级缓存,需要在配置文件中设置`mybatis.configuration.cache-enabled=true`。引用 在MyBatis中,对于缓存数据的更新机制,当某一个作用域(一级缓存Session/二级缓存Namespaces)进行了增删改操作后,默认会清空该作用域下所有select语句的缓存。引用 简单来说,MyBatis的Xml映射文件MyBatis内部数据结构之间有一种映射关系。Xml映射文件描述了数据库表Java对象之间的映射关系,包括了SQL语句结果映射。而MyBatis内部的数据结构则负责将这些映射关系加载到内存中,以便在执行SQL时能够正确地映射处理数据。这样,MyBatis就能够通过读取Xml映射文件来生成对应的数据访问对象,从而方便地进行数据库操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [SpringBoot入门教程:MyBatis二级缓存](https://blog.csdn.net/vbirdbest/article/details/109597260)[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%"] - *3* [MyBatis最新2021年面试题,高级面试题及附答案解析](https://blog.csdn.net/qfchenjunbo/article/details/121461108)[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
发出的红包

打赏作者

Java识堂

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

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

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

打赏作者

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

抵扣说明:

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

余额充值