返回顶部
首页 > 资讯 > 后端开发 > Python >Java关于MyBatis缓存详解
  • 442
分享到

Java关于MyBatis缓存详解

2024-04-02 19:04:59 442人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录什么是 mybatis 缓存MyBatis 缓存分类1.⼀级缓存:sqlSession级别,默认开启,并且不能关闭.(默认开启)2.二级缓存:Mapper 级别,默

什么是 MyBatis 缓存

使⽤缓存可以减少 Java 应⽤与数据库的交互次数,从而提升程序的运行效率。⽐如查询出 id = 1 的对象,第⼀次查询出之后会自动将该对象保存到缓存中,当下⼀次查询时,直接从缓存中取出对象即可, 无需再次访问数据库

MyBatis 缓存分类

1.⼀级缓存:SqlSession级别,默认开启,并且不能关闭.(默认开启)

操作数据库时需要创建 SqlSession 对象,在对象中有⼀个 HashMap ⽤于存储缓存数据,不同的 SqlSession 之间缓存数据区域是互不影响的。 ⼀级缓存的作用域是 SqlSession 范围的,当在同⼀个 SqlSession 中执⾏两次相同的 SQL 语句事,第⼀ 次执行完毕会将结果保存到缓存中,第⼆次查询时直接从缓存中获取。 需要注意的是,如果 SqlSession 执行了 DML 操作(insert、update、delete),MyBatis 必须将缓存清空以保证数据的准确性。

2.二级缓存:Mapper 级别,默认关闭,可以开启

使⽤⼆级缓存时,多个 SqlSession 使⽤同⼀个 Mapper 的 SQL 语句操作数据库,得到的数据会存在⼆ 级缓存区,同样是使⽤ HashMap 进⾏数据存储,相⽐较于⼀级缓存,⼆级缓存的范围更⼤,多个 SqlSession 可以共⽤⼆级缓存,⼆级缓存是跨 SqlSession 的。 ⼆级缓存是多个 SqlSession 共享的,其作⽤域是 Mapper 的同⼀个 namespace,不同的 SqlSession 两次执⾏相同的 namespace 下的 SQL 语句,参数也相等,则第⼀次执⾏成功之后会将数据保存到⼆级 缓存中,第⼆次可直接从⼆级缓存中取出数据。

二级缓存如何使用

1.MyBatis 自带的二级缓存

1.1config.xml 配置开启⼆级缓存


settings>
 <!-- 打印SQL-->
 <setting name="logImpl" value="STDOUT_LOGGING" />
 <!-- 开启延迟加载 -->
 <setting name="lazyLoadingEnabled" value="true"/>
 <!-- 开启⼆级缓存 -->
 <setting name="cacheEnabled" value="true"/>
</settings>

1.2Mapper.xml 中配置⼆级缓存


<cache></cache>

1.3实体类实现序列化接口


@Data
@AllArgsConstructor
@NoArgsConstructor
public class Account implements Serializable {
 private long id;
 private String username;
 private String passWord;
 private int age;
}

2.ehcache 二级缓存(第三方)

2.1pom.xml 添加相关依赖


<dependency>
 <groupId>org.mybatis</groupId>
 <artifactId>mybatis-ehcache</artifactId>
 <version>1.0.0</version>
</dependency>
<dependency>
 <groupId>net.sf.ehcache</groupId>
 <artifactId>ehcache-core</artifactId>
 <version>2.4.3</version>
</dependency>

2.2添加 ehcache.xml


<ehcache xmlns:xsi="Http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
 <diskStore/>
 <defaultCache
 maxElementsInMemory="1000"
 maxElementsOnDisk="10000000"
 eternal="false"
 overflowToDisk="false"
 timeToIdleSeconds="120"
 timeToLiveSeconds="120"
 diskExpiryThreadIntervalSeconds="120"
 memoryStoreEvictionPolicy="LRU">
 </defaultCache>
</ehcache>

2.3config.xml 配置开启⼆级缓存


<settings>
 <!-- 打印SQL-->
 <setting name="logImpl" value="STDOUT_LOGGING" />
 <!-- 开启延迟加载 -->
 <setting name="lazyLoadingEnabled" value="true"/>
 <!-- 开启⼆级缓存 -->
 <setting name="cacheEnabled" value="true"/>
</settings>

2.4 Mapper.xml 中配置⼆级缓存


<cache type="org.mybatis.caches.ehcache.EhcacheCache">
 <!-- 缓存创建之后,最后⼀次访问缓存的时间⾄缓存失效的时间间隔 -->
 <property name="timeToIdleSeconds" value="3600"/>
 <!-- 缓存⾃创建时间起⾄失效的时间间隔 -->
 <property name="timeToLiveSeconds" value="3600"/>
 <!-- 缓存回收策略,LRU表示移除近期使⽤最少的对象 -->
 <property name="memoryStoreEvictionPolicy" value="LRU"/>
</cache>

到此这篇关于Java关于MyBatis缓存详解的文章就介绍到这了,更多相关Java MyBatis 缓存内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java关于MyBatis缓存详解

本文链接: https://lsjlt.com/news/135886.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java关于MyBatis缓存详解
    目录什么是 MyBatis 缓存MyBatis 缓存分类1.⼀级缓存:SqlSession级别,默认开启,并且不能关闭.(默认开启)2.二级缓存:Mapper 级别,默...
    99+
    2024-04-02
  • Mybatis缓存详解
     什么是Mybatis缓存  使用缓存可以减少Java Application与数据库的交互次数,从而提升程序的运行效率。比如,查询id=1的user对象,第一次查询出来之后,会自动将该对象保存到缓存中。下...
    99+
    2024-04-02
  • Java MyBatis本地缓存原理详解
    目录背景发现问题复现解决问题探究缓存的原理Sql查询部分深入初见缓存告一段落番外篇-Myabtis创建CacheKey的算法。构造方法结束语背景 出现了一次生产事故,事情是这样的,我...
    99+
    2024-04-02
  • 关于Guava缓存详解及使用说明
    目录缓存Guava cache详细配置缓存的并发级别缓存的初始容量设置设置最大存储缓存清除策略显式清除Cache LoadingCache缓存 缓存分为本地缓存与分布式缓存...
    99+
    2022-11-13
    Guava缓存 Guava缓存使用 Guava缓存说明
  • 关于mybatis的一级缓存和二级缓存的那些事儿
    目录一、缓存是什么二、为什么需要缓存三、哪些数据会放到缓存四、mybatis一级缓存五、二级缓存六、注意事项一、缓存是什么 缓存其实就是存储在内存中的临时数据,这里的数据量会比较小,...
    99+
    2024-04-02
  • MyBatis 延迟加载、一级缓存、二级缓存(详解)
    使用ORM框架我们更多的是使用其查询功能,那么查询海量数据则又离不开性能,那么这篇中我们就看下mybatis高级应用之延迟加载、一级缓存、二级缓存。使用时需要注意延迟加载必须使用resultMap,resultType不具有延迟加载功能。一...
    99+
    2023-05-31
    一级缓存 二级缓存 mybatis
  • 关于golangtest缓存问题
    在使用vscode进行debug golang 时,出现test结果缓存的情况导致若干次test结果一致问题设置go test不用缓存官方说明https://pkg.go.dev/c...
    99+
    2024-04-02
  • java缓存框架Caffeine详解
    缓存在日常开发中启动至关重要的作用,基本是存储在内存中,数据的读取速度是非常快的,能大量减少对数据库的访问,减少数据库的压力,本文主要介绍了本地缓存Caffeine基本配置与基本用法,通过阅读本文,你...
    99+
    2023-10-26
    缓存 java
  • Java Mybatis一级缓存和二级缓存是什么
    本篇内容主要讲解“Java Mybatis一级缓存和二级缓存是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java Mybatis一级缓存和二级缓存是什么”吧!一、什么...
    99+
    2023-07-05
  • Java SpringCache+Redis缓存数据详解
    目录前言一、什么是SpringCache二、项目集成Spring Cache + Redis1、配置方式三、使用Spring Cache四、SpringCache原理与不足1、读模式...
    99+
    2024-04-02
  • springboot+mybatis+redis 二级缓存问题实例详解
    前言什么是mybatis二级缓存?二级缓存是多个sqlsession共享的,其作用域是mapper的同一个namespace。即,在不同的sqlsession中,相同的namespace下,相同的sql语句,并且sql模板中参数也相同的,会...
    99+
    2023-05-30
    spring boot mybatis
  • MyBatis 动态SQL和缓存机制实例详解
    有的时候需要根据要查询的参数动态的拼接SQL语句常用标签:- if:字符判断- choose【when...otherwise】:分支选择- trim【where,set】:字符串截取,其中where标签封装查询条件,s...
    99+
    2023-05-31
    mybatis 动态sql 缓存机制
  • 关于Java的Character类详解
    目录一、什么是Java Character 类?二、Character类有哪些常用的静态方法?1、将一个字符分别转换为大写字母和小写字母2、如何判断一个字符是否是数字?3、如何将一个...
    99+
    2023-05-20
    Java Java Character类
  • 关于Java中的 JSP 详解
    目录1、JSP的特点2、JSP的优势3、JSP的缺点4、JSP的用途前言: JSP 代表 Java 服务器页面。它是一种在应用服务器端使用的编程工具。JSP 基本上用于支持平台 – ...
    99+
    2024-04-02
  • 关于java方法区详解
    目录方法区图例(方法区中都保存什么)类型信息类型的常量池 (即运行时常量池)字段信息方法信息类变量(即static变量)对类加载器的引用对Class类的引用方法表JVM如何使用方法区...
    99+
    2024-04-02
  • 关于Java Spring三级缓存和循环依赖的深入理解
    目录一、什么是循环依赖?什么是三级缓存?二、三级缓存如何解决循环依赖?三、使用二级缓存能不能解决循环依赖?一、什么是循环依赖?什么是三级缓存? 【什么是循环依赖】什么是循环依赖很好理...
    99+
    2024-04-02
  • 关于spring的自定义缓存注解分析
    目录为什么要自定义缓存注解?自定义缓存注解CachedCacheUpdateCacheInvalidateCachedAspectCacheUpdateAspectCach...
    99+
    2023-05-20
    spring 注解 spring 自定义缓存
  • 关于Spring中一级缓存、二级缓存和三级缓存的那些事
    目录题记缓存作用分析一级缓存、二级缓存、三级缓存区别是什么总结题记 常常听到别人提起:“一级缓存、二级缓存、三级缓存”。那么它们是什么呢?有什么作用呢? 缓存...
    99+
    2024-04-02
  • mybatis中的缓存问题解析
    关于mybatis基础我们前面几篇博客已经介绍了很多了,今天我们来说一个简单的问题,那就是mybatis中的缓存问题。mybatis本身对缓存提供了支持,但是如果我们没有进行任何配置,那么默认情况下系统只开启了一级缓存,一级缓存就是同一个S...
    99+
    2023-05-31
    mybatis 缓存 batis
  • 关于Spring Cache 缓存拦截器( CacheInterceptor)
    目录Spring Cache 缓存拦截器( CacheInterceptor)spring cache常用的三种缓存操作具体整个流程是这样的CacheInterceptor.java...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作