缓存相关设置
1、全局 setting 的 cacheEnable:
cacheEnable:是否开启二级缓存
1 2 | <!-- 是否开启二级缓存 --> <setting name= "cacheEnabled" value= "true" /> |
取值:
1 2 | true :开启二级缓存 false :关闭缓存(关闭二级缓存)(一级缓存一直可用) |
配置二级缓存的开关,一级缓存一直是打开的。
2、select 标签的 useCache="true" 属性
每个 select 标签都有 useCache="true",配置这个 select 是否使用二级缓存,一级缓存一直是使用的
取值:
1 2 | true :开启二级缓存(一级二级缓存都使用) false :会把当前 select 语句的二级缓存关闭掉,不使用缓存(一级缓存依然使用,二级缓存不使用) |
默认为 true,当前 select 语句使用二级缓存。
代码示例:
<!-- public Emp getEmpByEid(String eid); -->
<select id="getEmpByEid" resultType="Emp" useCache="true">
select eid, ename, age, sex from emp
where eid = #{eid}
</select>
3、增删改查标签的 flushCache 属性
(1)增删改标签
每个增删改上面都有 flushCache 属性,且该属性默认为 true,一级二级缓存都会清除。
取值:
1 2 | true :一级二级都会清除【默认值】 false :不清除缓存 |
正是因为增删改标签上面该属性设置为了 true,所以在进行增删改操作完成后,一级缓存会清除。
(2)查询标签
每个 select 标签上面的 flushCache 属性默认为 false,不清除缓存。
所以进行查询后,第二次会从缓存中获取。
如果 flushCache="true" 每次查询之前都会清空缓存,缓存是没有被使用的。
4、SqlSession 的 clearCache()
1 | sqlSession.clearCache(); 只是清除当前session的一级缓存 |
5、全局 setting 的 localCacheScope 属性
在 MyBatis3.3 版本以后,可以设置一个 localCacheScope 属性,该属性表示本地缓存作用域(即设置一级缓存的作用域)
取值:
1 2 | SESSION:当前会话的所有数据保存在会话缓存中,使用一级缓存 STATEMENT:可以禁用一级缓存(几乎不使用) |
在全局配置中进行设置:
1 | <setting name= "localCacheScope" value= "STATEMENT" /> |
一般都不会进行缓存作用域的设置。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· 面试官:你是如何进行SQL调优的?