当前位置: 首页 > news >正文

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

相关文章:

  • stm32进入Infinite_Loop原因(因为有系统中断函数未自定义实现)
  • 门静脉高压——检查
  • FreeRTOS学习01_移植FreeRTOS到STM32(图文详解)
  • 从0到1构建我的AI星逻系统: LLM智能控制 + Streamlit前端实战
  • Netty
  • 简繁体智能翻译软件
  • ThreadLocal 源码
  • 7种分类数据编码技术详解:从原理到实战
  • 学习日记-day25-6.9
  • ArcGIS应用与FLUS模型预测:从安装到土地利用建模,数据管理、地图制作、遥感解译、空间分析、地形分析及案例分析攻略
  • 篇章二 论坛系统——系统设计
  • 【记录坑点问题】IDEA运行:maven-resources-production:XX: OOM: Java heap space
  • 监控升级:可视化如何让每一个细节 “说话”
  • 智能外呼系统的对于企业的优势
  • Python开发环境安装
  • python基础语法Ⅰ
  • A. Greedy Monocarp
  • 详解什么是One-Hot Encoding (独热编码)
  • 大数据学习(135)-Linux系统性指令
  • MinHook 如何对.NET底层的 Win32函数 进行拦截(上)