缓存
MyBatis 内置了一个强大的事务性查询缓存机制,它可以非常方便地配置和定制。
一级缓存[本地会话缓存](默认开启):
比如在一个方法中sqlSession 创建后可以多次调用其方法 等到sqlSession.close 后就全部失效
一级缓存失效的情况:
1.查询不同的东西
2.增删改操作(因为可能会改变原来的数据,必定会刷新缓存)
3.查询不同的mapper.xml
4.手动清除缓存 sqlSession.clearCache()
二级缓存(也叫全局缓存,诞生是因为一级缓存作用域太低)
基于namespace,在一个mapper范围内全部生效
默认情况下,只启用了本地的会话缓存,它仅仅对一个会话中的数据进行缓存。 要启用全局的二级缓存,只需要在你的 SQL 映射文件(映射接口中方法的xml文件)中添加一行(这个是设置二级缓存属性,开启的话是在config文件中):
<cache/>
步骤:
1.需要提前开启全局缓存 在设置settings 里面 设置
<setting name="cacheEnabled" value="true"/>
2.在需要的mapper.xml中加入标签(标签可以自定义一些属性,一般默认的就行)
<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/> 这个更高级的配置创建了一个 FIFO 缓存,每隔 60 秒刷新,最多可以存储结果对象或列表的 512 个引用,
而且返回的对象被认为是只读的,因此对它们进行修改可能会在不同线程中的调用者产生冲突。
缓存流程图
额外补充
单条sql语句也能设置缓存相关 利用标签里面的
***userCache属性(是否缓存) false不缓存(变更次数频繁的时候用)
***flushCashe属性(是否刷新) false不刷新
<dependency> <groupId>org.mybatis.caches</groupId> <artifactId>mybatis-ehcache</artifactId> <version>1.2.1</version> </dependency>
在cache里面加入type标签
<cache type="org.mybatis.caches.ehcache.EhcacheCache" />
ehcache.xml

<?xml version="1.0" encoding="UTF-8"?> <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd" updateCheck="false"> <diskStore path="./tmpdir/Tmp_EhCache"/> <defaultCache eternal="false" maxElementsInMemory="10000" overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="1800" timeToLiveSeconds="259200" memoryStoreEvictionPolicy="LRU"/> <cache name="cloud_user" eternal="false" maxElementsInMemory="5000" overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="1800" timeToLiveSeconds="1800" memoryStoreEvictionPolicy="LRU"/> </ehcache>
Redis K-V键值对
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?