MyBatis中关于缓存的理解

MyBatis缓存

  • MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存
    • 默认情况下,只有一级缓存开启(sqlSession级别的缓存)
    • 二级缓存需要手动开启配置,需要局域namespace级别的缓存

一级缓存(本地缓存)

  • 与数据库同一次会话期间查询到的数据会放入本地缓存当中
  • 如果以后需要获取相同的数据直接去缓存当中拿,没必要再去查询数据库

一级缓存失效的4种情况

  1. sqlSession不同
  2. sqlSession相同,查询条件不同
  3. sqlSession相同,两次查询之间执行了增删改操作
  4. sqlSession相同,手动清除一级缓存(session.close())

二级缓存

二级缓存是SqlSessionFactory级别,通过同一个SqlSessionFactory创建SqlSession查询结果会被缓存;此后若再次执行相同的查询语句,结果会从一个缓存中获取

二级缓存开启的条件

  1. 在核心配置文件中,设置全局属性caheEnable="true"
  2. 在映射件中置<Cache>
  3. 查询数据所转换的实体类类型必须实现序列化接口(序列化之后的数据存储不是对象,而是以数据的形式进行缓存)
  4. 二级缓存必须在SqlSession关闭或提交之后有效

Mybatis缓存查询顺序

  1. 先查询二级缓存,因为二级缓存中可能会有其他程序查询出来的数据,可以直接拿来使用

  2. 如果二级缓存未命中,再查询一级缓存

  3. 如果一级缓存也没有命中,则查询数据库

  4. SqlSession关闭之后,一级缓存的数据会写入二级缓存

相关推荐
weixin_399380691 分钟前
TongWeb7.0.4.9M11如何接入到idea(by lqw)
java·ide·intellij-idea
paopaokaka_luck13 分钟前
社区服务平台(加权协同过滤推荐、Jieba中文词频分析、WebSocket实时聊天、求助处理闭环、 活动积分闭环、ECharts多维分析)
java·前端·spring boot·mysql·echarts·mybatis
.Bryce.20 分钟前
T2-LLM评测不等于Agent评测
android·java·人工智能·后端·gpt·agent·1024程序员节
Wang's Blog21 分钟前
Java 项目实战: 交友项目 - 用户体系集成:查询用户环信账号密码
java·交友
Wang's Blog33 分钟前
Java 项目实战: 交友项目 - 发布评论
java·开发语言·交友
qq_364682151 小时前
录音APP怎么切换语言?多语言版本如何使用
java·服务器·前端
Wang's Blog1 小时前
Java 项目实战: 交友项目 - 用户体系集成:根据环信id查询用户详情
java·lua·交友
摇滚侠1 小时前
《On Java 中文版 基础卷》阅读笔记 复用 13
java·笔记·python
l1t1 小时前
DeepSeek总结的PostgreSQL 中的 SQL 与 PL/pgSQL:计划缓存
sql·缓存·postgresql
2601_968900771 小时前
玻璃深加工的工艺窗口:4 道工序的温度与时间参数边界
android·java·javascript