MyBatis一级和二级缓存介绍

MyBatis是一个持久层框架,它提供了一级缓存和二级缓存来提高数据库操作的性能。下面是一级缓存和二级缓存的区别理解、画图和知识点总结:

一级缓存:

  • 一级缓存是MyBatis默认开启的缓存层,它是SqlSession级别的缓存,也就是说同一个SqlSession中的多次查询会使用同一个缓存。
  • 一级缓存是在内存中实现的,它的生命周期与SqlSession相同。
  • 当SqlSession执行查询时,查询的结果会被保存在一级缓存中,下次再执行相同的查询语句时,会直接从缓存中取结果,而不需要再次访问数据库。
  • 一级缓存的失效条件包括:SqlSession关闭、手动清除缓存、增删改操作等。
  • 一级缓存的范围是SqlSession级别的,不同的SqlSession之间无法共享缓存。

二级缓存:

  • 二级缓存是MyBatis中的全局缓存,它是mapper级别的缓存,多个SqlSession可以共享同一个二级缓存。
  • 二级缓存是在SqlSessionFactory的级别实现的,它的生命周期与应用程序的生命周期相同。
  • 当SqlSession执行查询时,查询的结果会被保存在二级缓存中,下次再执行相同的查询语句时,会直接从缓存中取结果,而不需要再次访问数据库。
  • 二级缓存的失效条件包括:SqlSessionFactory刷新、手动清除缓存、增删改操作等。
  • 二级缓存的范围是mapper级别的,同一个namespace下的mapper可以共享二级缓存,不同的namespace之间无法共享缓存。
  • 使用二级缓存需要在Mapper的配置文件中配置<cache>标签。

总结:

  • 一级缓存是SqlSession级别的缓存,二级缓存是mapper级别的缓存。
  • 一级缓存的生命周期是与SqlSession相同,二级缓存的生命周期是与应用程序相同。
  • 一级缓存的范围是SqlSession级别的,二级缓存的范围是mapper级别的。
  • 一级缓存的作用范围是在同一个SqlSession中,二级缓存的作用范围是在多个SqlSession中。
  • 一级缓存是默认开启的,而使用二级缓存需要在Mapper的配置文件中进行配置。

以下是一级缓存和二级缓存的简单示意图:

复制代码
+------------+                  +----------------+
| SqlSession | ---------------->|       DB       |
|            |                  |                |
+----^-------+                  +------+---------+
     |                                   |
     |                                   |
     |                                   |
     |         +-----------------+       |
     +-------> |   一级缓存      | <-----+
               +-----------------+

+-----------------------+           +----------------+
|   SqlSessionFactory   |           |       DB       |
|                       |           |                |
+----^--------------+---+           +------+---------+
     |                                     |
     |                                     |
     |                                     |
     |        +-----------------+          |
     +------> |   二级缓存      | <--------+
               +-----------------+
相关推荐
程序猿乐锅5 小时前
【黑马点评 | 第八篇】Redisson分布式锁
java·数据库·spring boot·redis·分布式·spring·缓存
m0_587383006 小时前
广州24小时自助健身房解决方案实战指南与系统部署要点
java·spring·小程序·架构·需求分析
需要8267 小时前
分布式事务:Seata AT/TCC/SAGA 的取舍与踩坑
java·spring boot·分布式·spring·spring cloud
m0_587383007 小时前
深圳24小时自助健身房解决方案实战:从系统架构到部署指南
java·人工智能·spring boot·spring·系统架构·需求分析
九皇叔叔10 小时前
【09】SpringBoot4 MyBatisPlus 增删改查(CRUD)
java·mybatis·mybatisplus
2601_9521963610 小时前
计算机科学与技术专业应届生投商业分析岗,需要哪些额外能力?
数据库·oracle
后端LV11 小时前
一个注解不用写,给你的 Spring Boot 接口加上限流、日志、指标和钉钉告警
spring
卓怡学长11 小时前
w202springboot基于B_S架构的图书信息管理系统
java·spring boot·spring·intellij-idea
景熙552312 小时前
JDBC 详解:从原理到实战(含完整可运行 Demo)
java·spring·tomcat·mybatis·jdbc
程序猿乐锅12 小时前
一文讲透缓存穿透、击穿和雪崩
java·redis·spring·缓存·mybatis