首页 > 编程语言 >java mybatis一级缓存二级缓存三级缓存详解

java mybatis一级缓存二级缓存三级缓存详解

时间:2023-08-03 17:33:20浏览次数:37  
标签:Mapper 缓存 java 一级 SqlSession MyBatis 二级缓存 mybatis


java mybatis一级缓存二级缓存三级缓存详解_二级缓存

在 MyBatis 中,存在一级缓存、二级缓存和三级缓存的概念。下面我将为你详细解释这些缓存的含义和作用:

  1. 一级缓存:
  • 一级缓存是 MyBatis 默认开启的缓存机制,它是指在同一个 SqlSession 对象中,执行相同的 SQL 语句时,会将查询结果缓存到内存中。
  • 一级缓存的作用范围仅限于当前的 SqlSession,当 SqlSession 关闭后,缓存数据也就被清空。
  • 当执行相同的查询操作时,MyBatis 会首先从一级缓存中查找数据,如果找到了则直接返回缓存的结果,避免再次访问数据库。
  1. 二级缓存:
  • 二级缓存是在一个 Mapper 的命令空间(namespace)范围内共享的缓存,可以跨越多个 SqlSession 使用。
  • 二级缓存的配置需要在 Mapper XML 文件中进行设置,并且需要手动启用。例如,在 Mapper XML 文件的 <mapper> 标签下添加 <cache> 子标签。
  • 当执行查询操作时,如果开启了二级缓存并且命中了缓存,则直接返回缓存的结果,而不会访问数据库。
  • 默认情况下,二级缓存使用的是 PerpetualCache 类来实现,它使用 HashMap 存储缓存数据。
  1. 三级缓存:
  • 三级缓存是指 MyBatis 通过集成第三方的缓存框架(如 Ehcache)实现的缓存机制。
  • 在 MyBatis 中,可以配置使用第三方缓存框架作为二级缓存的实现,从而提供更高效的缓存管理。
  • 配置使用第三方缓存框架需要在 MyBatis 的配置文件中进行设置,并且在 Mapper XML 文件中指定缓存的类型和位置。
  • 使用三级缓存可以将缓存数据存储到独立的缓存服务器中,提供更好的性能和扩展性。

需要注意的是,尽管缓存可以提升查询性能,但在某些情况下也可能导致数据不一致的问题。因此,在使用缓存时,需要根据具体的业务需求和数据操作特点来合理配置和使用缓存,并且在更新、插入或删除数据时及时清空相应的缓存,以保证数据的一致性。

标签:Mapper,缓存,java,一级,SqlSession,MyBatis,二级缓存,mybatis
From: https://blog.51cto.com/u_16173281/6951250

相关文章

  • Java(从零到企业级电商项目实战)学习笔记
    资料网站:http://learning.happymmall.com/env.html一、mybatis三剑客:generator,plugin,pagehelperpagehelper->https://github.com/pagehelper/Mybatis-PageHelper二、spring例子:https://github.com/spring-projects/spring-mvc-showcasehttps://github.com/spring-proj......
  • 前端性能优化的利器 ——— 浅谈JavaScript中的防抖和节流
    防抖和节流函数是工作中两种常用的前端性能优化函数,今天我就来总结一下什么是防抖和节流,并详细说明一下如何在工作中应用防抖和节流函数什么是防抖和节流?在JavaScript中,防抖(debounce)和节流(throttle)是用来限制函数执行频率的两种常见技术。防抖(debounce)是指在某个时间段内......
  • Java后端02(jsp)
    jsp​ servlet是无法将后端获取的数据传递给html页面的,无法再servlet中通过转发或者是重定向的方式,给html页面传递响应的后端数据,servlet中由于拼接过于繁琐,是不适合写html的因此引入了jsp,既可以编写html标签,也可以写Java代码,<dependency><groupId>javax.serv......
  • Java后端03(浅谈注解)
    注解功能一:提示信息功能二:存储信息​ 注解需要定义注解类,类对象需要有落实的实体,注解可以出现在类Class上,方法Method上,成员变量Field上以及构造方法Constructor上,注解对象需要被添加注解的实体所对应的反射对象进行获取,人话:要获得注解信息,首先要获得修饰的东西的反射......
  • Java后端04(Ajax异步加载)
    Ajax异步加载jsp涉及到的问题每次哪怕是页面的局部修改,都会导致服务器重新获取,页面的所有信息,导致jsp页面的效率非常低下前端jsp页面无法脱离服务器运行前端和后端无法分离开发,开发效率低下Ajax介绍​ Ajax是由谷歌开发,底层是通过js开发的技术,如果页面内容只是局部......
  • Javascript 方法有多个参数有默认值,但是只想为其中某个参数赋值
    例子:functionlog(a,b=2,c=3,d=4){console.log(a,b,c,d)}log(1);//output:1234log(1,3,6,9);//1369log(1,undefined,9,12);//12912log(1,undefined,0);//1204log(1,undefined,undefined,16);//12316就是在你想......
  • Java入门题-输入一个字母,判断是不是大写,是直接输出,不是转换成大写输出
    重要:利用ASCII码判断字母是否是大小写需要引用Scanner方法 代码:importjava.util.Scanner;1、利用char数组转化的优点在于面对字符串,也可以批量对单个字符操作Scannerget_letter=newScanner(System.in);StringgetLetter=get_letter.next();charss[]=getLetter.to......
  • python以及java环境搭建+解决不同版本环境共存问题
    1.搭建python环境1.安装python3.9.7,选择自定义安装、将文件添加至环境路径,然后选择下一步。2.默认、然后选择下一步。3.选择适用于所有使用者,选择自己想要存放的路径,然后选择点击安装。等待片刻。。。4.点击安装完成。使用cdm命令,输入python查看是否安装成功。5.安装python2......
  • android调用javascript传多个参数
    Stringparam1="Hello";Stringparam2="World";Stringscript="yourJavaScriptFunction('"+param1+"','"+param2+"');";webView.loadUrl("javascript:"+"yourJava......
  • Java入门题-输入3个数字比大小
    重要:能想明白输入数字之间大小比较的逻辑方式与之前相同,有关输入类型相关的,就需要引用Scanner方法 代码:不要忘记先 importjava.util.Scanner;1、复杂版-同时也是最开始思考时的思路版本intsave_number1=0,save_number2=0,save_number3=0;for(inti=1;i<4;......