MyBatis缓存

server/2024/12/14 20:35:18/

目录

​编辑

一、MyBatis运行顺序

二、一级缓存

(1)一级缓存失效的四种情况

1.查询时所使用的sqlSession不同

2.sqlSession相同但是当前查询条件不同

3.sqlSesssion相同,但两次查询之间进行了增删改的操作

4.手动清除了一切缓存

三、二级缓存

(1)开启二级缓存的四个条件

(2)Cache参数


一、MyBatis运行顺序

在Test类中,在@Test注解前还有@Before和@After注解,其中@Before在测试执行前进行,@After在执行后进行

MyBatis运行的流程图如下所示 :

sqlSession对象本质上是堆里开辟的一块内存空间。sqlSessin对象创建后会通过executor执行,并在本地生成本地缓存,这样,在第二次调用该sql语句时,即可直接调用缓存

我们写一个简单的例子进行测试 

执行结果我们可以看到,只执行了一次sql语句(第二次调用本地缓存)

并且二者指向的的地址都为同一个

二、一级缓存

一级缓存: sqlSession级别的缓存

(1)一级缓存失效的四种情况
1.查询时所使用的sqlSession不同

定义两个session,factor可以生成多个session对象。吧

此时的结果为

2.sqlSession相同但是当前查询条件不同
3.sqlSesssion相同,但两次查询之间进行了增删改的操作

如果进行了增删改的操作,数据库的内容发生更改,本地缓存也一定会变化,否则就会查找到错误的信息。换句话说,也就是为了保证缓存一致性

4.手动清除了一切缓存
java">session1.clearCache();
//手动清除一级缓存

三、二级缓存

二级缓存:sqlSession Factory,二级缓存默认情况下是关闭的

(1)开启二级缓存的四个条件

①:在核心配置文件中,设置全局属性caheEnable="true"。

②:在映射件中置<Cache>

注意!哪个映射文件中写上了cache,哪个文件才会开启二级缓存

③:查询数据所转换的实体类类型必须实现序列化接口

④:二级缓存必须在SqlSession关闭或提交之后有效,即必须让一级缓存失效才可以使用二级缓存

这里还是两个session的情况

结果如下

注意!一级缓存中缓存的是对象,二级缓存缓存的是数据,不是对象。 

(2)Cache参数

LRU(最近最少使用的):移除最长时间不被使用的对象,这是默认值。

FIFO(先进先出):按对象进入缓存的顺序来移除它们。

SOFT(软引用):移除基于垃圾回收器状态和软引用规则的对象。

WEAK(弱引用):更积极地移除基于垃圾收集器状态和弱引用规则的对象。

flushinterval(刷新间隔):可以被设置为任意的正整数,而且它们代表一个合理的毫秒形式的时间段。(默认情况不设置,即没有刷新间隔,缓存仅仅在调用语句时刷新。)

size(引用数目):可以被设置为任意正整数,要记住缓存的对象数目和运行环境的可用内存资源数目。默认值是1024 。

readOnly(只读):属性可以被设置为 true / false。

  • true:只读缓存:会给所有调用者返回缓存对象的相同实例。因此这些对象不能被修改, 这提供了很重要的性能优势。
  • false读写缓存: 通过序列化返回缓存对象的拷贝,这种方式会慢一些,但是安全,因此默认是 false。

http://www.ppmy.cn/server/150180.html

相关文章

(RHCE)工程师学习考证

如果你像我一样&#xff0c;非科班出身且对 IT 行业知识储备几乎为零&#xff0c;却立志考取 RHCE 红帽工程师证书&#xff0c;那么以下这份学习教程或许能助你一臂之力。 首先&#xff0c;要对 RHCE 有个基本的认识。RHCE 是红帽企业级 Linux 认证&#xff0c;它侧重于实际操作…

【汽车】-- 燃油发动机3缸和4缸

3缸和4缸燃油发动机是小轿车常见的发动机配置。以下从结构特点、性能、经济性等方面对两者进行对比&#xff0c;并分析优缺点及使用注意事项&#xff1a; 1. 结构与运行原理 3缸发动机 特点&#xff1a;少一个气缸&#xff0c;内部零部件更少&#xff0c;整体结构更紧凑。优点…

鸿蒙NEXT开发案例:颜文字搜索器

【引言】 本文将介绍一个名为“颜文字搜索器”的开发案例&#xff0c;该应用是基于鸿蒙NEXT平台构建的&#xff0c;旨在帮助用户快速查找和使用各种风格的表情符号。通过本案例的学习&#xff0c;读者可以了解如何在鸿蒙平台上进行数据处理、UI设计以及交互逻辑的实现。 【环…

unity中的UI介绍

unity中的UI介绍 1. Canvas&#xff08;画布&#xff09;2. Image&#xff08;图像&#xff09;3. Button&#xff08;按钮&#xff09;4. Text&#xff08;文本&#xff09;5. Input Field&#xff08;输入框&#xff09;6. Toggle&#xff08;切换按钮&#xff09;7. Slider&…

Qt-chart 画折线图(以时间为x轴)

上图 代码 #include <iostream> #include <random> #include <qcategoryaxis.h>void MainWindow::testLine() {//1、创建图表视图QChartView* view new QChartView(this);//2.创建图表QChart* chart new QChart();//3.将图表设置给图表视图view->setCh…

【漏洞复现】CVE-2024-34102 Magento Open Source XXE漏洞

目录 漏洞介绍 影响版本 环境搭建 查看版本 漏洞复现 手动复现 漏洞 poc Magento Open Source 是一个免费开源的电子商务平台&#xff0c;适合中小企业或开发团队通过自定义代码和插件创建在线商店。它由社区开发和支持&#xff0c;功能强大但需要更多的技术投入。Adobe…

图像的放缩比率如何计算的?

图像的放缩比率如何计算关键点 在医疗软件的胶片打印中&#xff0c;图像放缩比率的计算需要更加精确和考虑更多因素&#xff0c;以确保最终打印出来的影像准确无误&#xff0c;符合诊断要求。 以下是一些关键点&#xff1a; 像素间距&#xff08;Pixel Spacing&#xff09;&a…

Debezium系列之:使用Debezium采集oceanbase数据库

Debezium系列之:使用Debezium采集oceanbase数据库 一、oceanbase数据库二、安装OceanBase三、安装oblogproxy四、基于Docker的简单采集案例五、生产实际应用案例Debezium 是一个开源的分布式平台,用于监控数据库变化和捕捉数据变动事件,并以事件流的形式导出到各种消费者。D…