Mybatis-plus缓存机制

简介: MyBatis-Plus(简称MP)是一个基于MyBatis的增强工具,提供了更便捷的CRUD操作和其他功能。与MyBatis相比,MyBatis-Plus并没有引入自己的缓存机制,而是直接使用了MyBatis的缓存机制。在MyBatis中,缓存分为一级缓存和二级缓存。1. 一级缓存:一级缓存是SqlSession级别的缓存,它默认是开启的。当查询操作执行时,查询的结果会被缓存在SqlSession的内部数据结构中。如果后续再次执行相同的查询,MyBatis会先检查一级缓存中是否存在结果,如果存在则直接返回缓存的结果,而不会再次执行SQL语句。一级缓存的生命周期与SqlSession相同,

Mybatis-plus缓存机制

一,介绍

MyBatis-Plus(简称MP)是一个基于MyBatis的增强工具,提供了更便捷的CRUD操作和其他功能。与MyBatis相比,MyBatis-Plus并没有引入自己的缓存机制,而是直接使用了MyBatis的缓存机制。

在MyBatis中,缓存分为一级缓存和二级缓存。

  1. 一级缓存:一级缓存是SqlSession级别的缓存,它默认是开启的。当查询操作执行时,查询的结果会被缓存在SqlSession的内部数据结构中。如果后续再次执行相同的查询,MyBatis会先检查一级缓存中是否存在结果,如果存在则直接返回缓存的结果,而不会再次执行SQL语句。一级缓存的生命周期与SqlSession相同,当SqlSession关闭时,一级缓存也会被清空。
  2. 二级缓存:二级缓存是Mapper级别的缓存,它可以被多个SqlSession共享。当一个查询执行完毕后,查询的结果会被缓存到二级缓存中。当后续其他SqlSession执行相同的查询时,MyBatis会先检查二级缓存中是否存在结果,如果存在则直接返回缓存的结果,而不会再次执行SQL语句。二级缓存的生命周期与应用程序的整个生命周期相同,当应用程序关闭时,二级缓存才会被清空。

需要注意的是,二级缓存默认是关闭的,需要在MyBatis的配置文件中进行配置才能启用。同时,为了保证数据的一致性,MyBatis对于更新操作(如插入、更新、删除)会自动清空相关的二级缓存。

总结起来,MyBatis-Plus并没有引入自己的缓存机制,而是直接使用了MyBatis的一级缓存和二级缓存。一级缓存是SqlSession级别的缓存,而二级缓存是Mapper级别的缓存。开发者可以根据具体的需求来选择是否启用和配置二级缓存。

二,一级缓存

MyBatis-Plus并没有引入自己的一级缓存机制,而是直接使用了MyBatis的一级缓存。一级缓存是MyBatis中默认开启的,它是基于SqlSession级别的缓存,用于缓存查询操作的结果。

在MyBatis中,一级缓存的实现方式如下:

  1. SqlSession级别的缓存:每个SqlSession对象都有一个独立的一级缓存。当执行查询操作时,查询的结果会被缓存到当前SqlSession对象的一级缓存中。
  2. 缓存结构:一级缓存使用一个HashMap来存储查询结果。HashMap的键是查询的SQL语句和参数的组合,值是查询的结果对象。
  3. 缓存命中:当执行查询操作时,MyBatis会先检查当前SqlSession对象的一级缓存中是否存在相同的查询(相同的SQL语句和参数),如果存在则直接返回缓存的结果,而不会再次执行SQL语句。
  4. 缓存失效:一级缓存的生命周期与SqlSession对象相同。当SqlSession对象执行更新操作(如插入、更新、删除)时,会自动清空一级缓存,以保证数据的一致性。

需要注意的是,一级缓存是基于SqlSession对象的,不同的SqlSession对象之间的缓存是相互独立的。如果多个SqlSession对象同时操作同一份数据,它们之间的一级缓存是不共享的,可能会导致数据不一致的情况。

对于一级缓存的控制,MyBatis提供了以下几种方式:

  1. 默认开启:一级缓存在MyBatis中是默认开启的,无需额外配置。
  2. 手动清空:可以通过调用SqlSession的

clearCache()方法手动清空一级缓存。

  1. 配置禁用:可以在MyBatis的配置文件中通过设置

localCacheScope属性来禁用一级缓存。将localCacheScope设置为STATEMENT即可禁用一级缓存,每次查询都会强制刷新缓存。

总结起来,MyBatis-Plus并没有引入自己的一级缓存机制,而是直接使用了MyBatis的一级缓存。一级缓存是基于SqlSession级别的缓存,通过HashMap存储查询结果,可以提高查询性能。一级缓存是默认开启的,开发者可以通过手动清空或配置禁用的方式进行控制。

三,二级缓存

MyBatis-Plus并没有引入自己的二级缓存机制,而是直接使用了MyBatis的二级缓存。二级缓存是Mapper级别的缓存,用于缓存查询操作的结果。

在MyBatis中,二级缓存的实现方式如下:

  1. 配置启用:为了启用二级缓存,需要在MyBatis的配置文件中进行相应的配置。在

标签中添加标签,并设置type属性为合适的缓存实现类,如org.apache.ibatis.cache.impl.PerpetualCache。

  1. 缓存结构:二级缓存使用一个HashMap来存储查询结果。HashMap的键是查询的SQL语句和参数的组合,值是查询的结果对象。
  2. 缓存命中:当执行查询操作时,MyBatis会先检查二级缓存中是否存在相同的查询(相同的SQL语句和参数),如果存在则直接返回缓存的结果,而不会再次执行SQL语句。
  3. 缓存失效:二级缓存的生命周期与应用程序的整个生命周期相同。当执行更新操作(如插入、更新、删除)时,MyBatis会自动清空相关的二级缓存,以保证数据的一致性。

需要注意的是,二级缓存默认是关闭的,需要在MyBatis的配置文件中进行配置才能启用。

对于二级缓存的控制,MyBatis提供了以下几种方式:

  1. 默认配置:可以使用MyBatis的默认配置来启用二级缓存。在MyBatis的配置文件中,设置

即可启用二级缓存。

  1. 显式配置:可以在Mapper接口或XML文件中使用

标签来显式配置二级缓存。在标签中可以设置缓存的实现类、缓存的大小、缓存的过期时间等属性。

  1. 注解配置:可以使用

@CacheNamespace注解在Mapper接口上配置二级缓存。通过注解的方式可以灵活地控制缓存的行为。

总结起来,MyBatis-Plus并没有引入自己的二级缓存机制,而是直接使用了MyBatis的二级缓存。二级缓存是Mapper级别的缓存,可以提高查询性能。二级缓存默认是关闭的,需要在MyBatis的配置文件中进行配置才能启用,并可以通过默认配置、显式配置或注解配置的方式进行控制。

四,一级缓存和二级缓存的差异和关系

一级缓存和二级缓存是MyBatis中两种不同级别的缓存机制,它们有一些差异和关系。

  1. 级别差异:
  • 一级缓存(SqlSession级别):一级缓存是默认开启的,它是基于SqlSession对象的缓存,用于缓存单个SqlSession中的查询结果。
  • 二级缓存(Mapper级别):二级缓存是可选的,需要手动进行配置启用,它是基于Mapper接口的缓存,用于缓存多个SqlSession之间的查询结果。
  1. 范围差异:
  • 一级缓存:一级缓存的作用范围是在同一个SqlSession中。当执行查询操作时,查询的结果会被缓存在当前SqlSession对象中,其他相同的查询可以直接从缓存中获取结果。
  • 二级缓存:二级缓存的作用范围是在多个SqlSession之间共享。当执行查询操作时,查询的结果会被缓存在一个共享的缓存区域中,其他SqlSession可以直接从缓存中获取结果。
  1. 生命周期差异:
  • 一级缓存:一级缓存的生命周期与SqlSession对象相同。当SqlSession对象执行更新操作(如插入、更新、删除)时,会自动清空一级缓存,以保证数据的一致性。
  • 二级缓存:二级缓存的生命周期与应用程序的整个生命周期相同。当执行更新操作时,MyBatis会自动清空相关的二级缓存,以保证数据的一致性。
  1. 关系:
  • 二级缓存是建立在一级缓存之上的。当一个SqlSession执行查询操作时,如果命中了一级缓存,则直接返回缓存的结果;如果没有命中一级缓存,则会去二级缓存中查找结果。如果二级缓存中存在相同的查询结果,则返回缓存的结果;如果二级缓存中不存在结果,则执行数据库查询,并将结果放入一级缓存和二级缓存中。

需要注意的是,一级缓存和二级缓存是独立的,它们的数据存储结构和缓存命中策略也不同。一级缓存是基于SqlSession对象的,缓存的数据只在当前SqlSession中有效;而二级缓存是基于Mapper接口的,缓存的数据在多个SqlSession之间共享。

在使用MyBatis时,可以根据具体的需求和场景选择是否启用二级缓存,以及合理使用一级缓存和二级缓存,以提高查询性能和减少数据库访问。

五,总结

Mybatis-plus并没有引入自己的缓存机制,而是直接使用了MyBatis的一级缓存和二级缓存。一级缓存是SqlSession级别的缓存,二级缓存是Mapper级别的缓存。一级缓存是默认开启的,通过HashMap存储查询结果,可以提高查询性能。二级缓存默认是关闭的,需要在MyBatis的配置文件中进行配置才能启用。二级缓存是基于Mapper接口的,缓存的数据在多个SqlSession之间共享。一级缓存和二级缓存是独立的,它们的数据存储结构和缓存命中策略也不同。在使用MyBatis时,可以根据具体的需求和场景选择是否启用二级缓存,以及合理使用一级缓存和二级缓存,以提高查询性能和减少数据库访问。

目录
相关文章
|
2月前
|
缓存 Java 数据库连接
mybatis复习05,mybatis的缓存机制(一级缓存和二级缓存及第三方缓存)
文章介绍了MyBatis的缓存机制,包括一级缓存和二级缓存的配置和使用,以及如何整合第三方缓存EHCache。详细解释了一级缓存的生命周期、二级缓存的开启条件和配置属性,以及如何通过ehcache.xml配置文件和logback.xml日志配置文件来实现EHCache的整合。
mybatis复习05,mybatis的缓存机制(一级缓存和二级缓存及第三方缓存)
|
3月前
|
缓存 应用服务中间件 nginx
Web服务器的缓存机制与内容分发网络(CDN)
【8月更文第28天】随着互联网应用的发展,用户对网站响应速度的要求越来越高。为了提升用户体验,Web服务器通常会采用多种技术手段来优化页面加载速度,其中最重要的两种技术就是缓存机制和内容分发网络(CDN)。本文将深入探讨这两种技术的工作原理及其实现方法,并通过具体的代码示例加以说明。
337 1
|
6天前
|
SQL Java 数据库连接
Mybatis架构原理和机制,图文详解版,超详细!
MyBatis 是 Java 生态中非常著名的一款 ORM 框架,在一线互联网大厂中应用广泛,Mybatis已经成为了一个必会框架。本文详细解析了MyBatis的架构原理与机制,帮助读者全面提升对MyBatis的理解和应用能力。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Mybatis架构原理和机制,图文详解版,超详细!
|
15天前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
15天前
|
SQL 缓存 Java
MyBatis如何关闭一级缓存(分注解和xml两种方式)
MyBatis如何关闭一级缓存(分注解和xml两种方式)
43 5
|
1月前
|
缓存 Java 数据库连接
使用MyBatis缓存的简单案例
MyBatis 是一种流行的持久层框架,支持自定义 SQL 执行、映射及复杂查询。本文介绍了如何在 Spring Boot 项目中集成 MyBatis 并实现一级和二级缓存,以提高查询性能,减少数据库访问。通过具体的电商系统案例,详细讲解了项目搭建、缓存配置、实体类创建、Mapper 编写、Service 层实现及缓存测试等步骤。
|
1月前
|
存储 缓存 负载均衡
Nginx代理缓存机制
【10月更文挑战第2天】
69 4
|
1月前
|
存储 缓存 NoSQL
深入理解后端缓存机制的重要性与实践
本文将探讨在后端开发中缓存机制的应用及其重要性。缓存,作为提高系统性能和用户体验的关键技术,对于后端开发来说至关重要。通过减少数据库访问次数和缩短响应时间,缓存可以显著提升应用程序的性能。本文将从缓存的基本概念入手,介绍常见的缓存策略和实现方式,并通过实例展示如何在后端开发中有效应用缓存技术。最后,我们将讨论缓存带来的一些挑战及其解决方案,帮助您在实际项目中更好地利用缓存机制。
|
2月前
|
存储 缓存 Android开发
Android RecyclerView 缓存机制深度解析与面试题
本文首发于公众号“AntDream”,详细解析了 `RecyclerView` 的缓存机制,包括多级缓存的原理与流程,并提供了常见面试题及答案。通过本文,你将深入了解 `RecyclerView` 的高性能秘诀,提升列表和网格的开发技能。
67 8
|
2月前
|
缓存 Java Python
python垃圾回收&缓存机制
python垃圾回收&缓存机制