MyBatis中的缓存
一级缓存
一级缓存默认会启用,想要关闭一级缓存可以在 select 标签上配置 flushCache=“true”;一级缓存存在于 SqlSession 的生命周期中,在同一个 SqlSession 中查询时, MyBatis 会把执行的方法和参数通过算法生成缓存的键值,将键值和查询结果存入一个 Map 对象中。如果同一个 SqlSession 中执行的方法和参数完全一致,那么通过算法会生成相同的键值,当Map 缓存对象中己经存在该键值时,则会返回缓存中的对象;任何的 INSERT 、UPDATE 、DELETE 操作都会清空一级缓存;
二级缓存
二级缓存也叫应用缓存,存在于 SqlSessionFactory 的生命周期中,可以理解为跨 sqlSession;
缓存是以 namespace 为单位的,不同 namespace 下的操作互不影响。在 MyBatis 的核心配置文件中 cacheEnabled 参数是二级缓存的全局开关,默认值是 true,如果把这个参数设置为false,即使有后面的二级缓存配置,也不会生效;要开启二级缓存,你需要在你的 SQL Mapper 文件中添加配置:
缓存调用注意事项:
- 每次与数据库的连接都会优先从缓存中获取数据
- 先查二级缓存,再查一级缓存
- 二级缓存以 namespace 为单位的,是可以由SqlSession 共享的,容易出现脏读,建议避免使用二级缓存。多个namespace是可以通过
标签来指定namespace属性实现共享同一个namespace的二级缓存。 - 一级缓存是 SqlSession 独享的,建议开启
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人