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

目录
相关文章
|
3月前
|
存储 缓存 前端开发
HTTP的缓存机制是什么?
HTTP的缓存机制是什么?
28 1
|
3月前
|
缓存 Java 数据库连接
MyBatis的缓存
MyBatis的缓存
|
3月前
|
存储 消息中间件 缓存
redis的缓存机制
redis的缓存机制
93 0
|
5天前
|
缓存 Linux
linux系统缓存机制
linux系统缓存机制
|
16天前
|
XML 缓存 Java
MyBatis二级缓存解密:深入探究缓存机制与应用场景
MyBatis二级缓存解密:深入探究缓存机制与应用场景
50 2
MyBatis二级缓存解密:深入探究缓存机制与应用场景
|
1月前
|
存储 缓存 算法
深入探究LRU缓存机制:优化内存利用与提升性能
深入探究LRU缓存机制:优化内存利用与提升性能
151 1
|
1月前
|
存储 缓存 Java
什么!?实战项目竟然撞到阿里面试的原题!???关于MyBatis Plus的缓存机制
什么!?实战项目竟然撞到阿里面试的原题!???关于MyBatis Plus的缓存机制
|
1月前
|
缓存 Java 数据库连接
mybatis 数据库缓存的原理
MyBatis 是一个流行的 Java 持久层框架,它封装了 JDBC,使数据库交互变得更简单、直观。MyBatis 支持两级缓存:一级缓存(Local Cache)和二级缓存(Global Cache),通过这两级缓存可以有效地减少数据库的访问次数,提高应用性能。
282 1
|
1月前
|
存储 缓存 Java
【MyBaits】4、延迟加载、MyBatis 的缓存
【MyBaits】4、延迟加载、MyBatis 的缓存
22 0
|
2月前
|
SQL 缓存 Java
mybatis缓存详解
mybatis缓存详解
23 0