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关闭之后,一级缓存的数据会写入二级缓存

相关推荐
cc蒲公英6 分钟前
uniapp x swiper/image组件mode=“aspectFit“ 图片有的闪现后黑屏
java·前端·uni-app
刘大辉在路上7 分钟前
IntelliJ IDEA开发编辑器摸鱼看股票数据
java·编辑器·intellij-idea
Monika Zhang21 分钟前
Redis缓存详解及常见问题解决方案
数据库·redis·缓存
我来整一篇1 小时前
[mysql] 深分页优化
java·数据库·mysql
Sadsvit1 小时前
Linux 服务器性能监控、分析与优化全指南
java·linux·服务器
hqxstudying1 小时前
Java开发时出现的问题---语言特性与基础机制陷阱
java·jvm·python
Monika Zhang1 小时前
Memcached 缓存详解及常见问题解决方案
数据库·缓存·memcached
kfyty7251 小时前
loveqq-mvc 再进化,又一款分布式网关框架可用
java·后端
CodeCraft Studio1 小时前
使用 Aspose.OCR 将图像文本转换为可编辑文本
java·人工智能·python·ocr·.net·aspose·ocr工具
程序员清风2 小时前
Context7 MCP,让Cursor告别代码幻觉!
java·后端·面试