Mybatis缓存实现

news2024/11/13 8:04:39

01-一级缓存

演示案例首先创建sql查询语句

在对应接口中声明方法参数是Dept因为sql语句中的参数在Dept pojo类中都有所有声明pojo对象

由于返回的数量不知道是多少条所以用list接收,<>由于返回的是dept类数据所以泛型里传入Dept

一级缓存的介绍如下图

失效情况详细介绍:

1.不同的sqlSession会使一级缓存失效在一个测试方法有两个sqlSession一级缓存就会失效

2.同一个SqlSession,但是查询语句不一样一个按名字查找一个按id查找,但是结果相同一级缓存失效

3.同一个SqlSession,查询语句一样,期间执行增删改操作,例如下图加入了一个增加的操作使得同样的sql语句一级缓存失效

4.同一个SqlSession,查询语句一样,执行手动清除缓存,一级缓存内容没有了自然就失效了

二级缓存

首先在mybatis里面添加二级缓存的标签如下图所示

然后再对应要用到的sql xml文件中设置<cache>标签

然后创建测试方法但是测试类里我们List里的是javabean对象这里的Dept,并且测试类的方法里的sql语句分别在不同的sqlsession里面

然后再对应的类中继承Serializable接口

最后运行查询两次只有一次的结果说明进入到二级缓存了

同一个命名空间进行了增删改的操作,会导致二级缓存失效

在不同命名空间二级缓存不会失效,下面展示不同命名空间的一个是查dept一个是增加emp

在xml文件中增加的sql语句里面的<cache>可写可不写都不影响

在测试类调用方法最后发现二级缓存没有失效

在相同命名空间二级缓存会失效,查询和增加都是dept,注意增加得时候需要提交下事务用sqlSession.commit();

下一种让二级缓存失效的办法就是在sql语句中加入flushCache标签设置为false

还有一种方案只能在select中用使用userCache标签然查询不使用二级缓存

还可以通过用cache-ref在其他的xml文件中声明并且在测试类中引用它也会使得二级缓存失效

如图测试类中用来两个同样的select语句都查询dept和用一个emp的添加,因为在原来用不同类的sql语句的增删改是不会让二级缓存失效的,但是加了cache-ref就会让在不同类中的sql语句用的时候会让二级缓存失效

cache里面属性的解释,其中的readOnly设置false可以避免脏读的问题

默认我们用false,在第一次查询后我们把查询到的内容修改了,修改的方式为拷贝一份数据出去进行修改因为我们用的false,所以最后显示的内容和原来的一样

当我们设置为true的时候就不是拷贝一份二级缓存中的数据了而是引用二级缓存中的数据,我们要是修改其中读取到的数据内容的话,再次查询就和原来的数据不一样了,如下下下图所示

03-整合第三方缓存

首先导入依赖包在pom.xml

在对应的xml文件中填入cachae并且把type修改如下图样式

写入redis.properties文件如果没有密码就不用设置

最后运行此方法

然后开启redis-server.exe

然后再开启redis-cil.exe文件,在里面创建个参数xs

最后发现参数xs和运行的sql语句的key和value说明运行redisStudio软件发现成功了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2147346.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【移动端开发】“明日头条APP”

文章目录 1 系统概述1.1研究背景1.2研究意义 2 系统设计2.1 关键技术2.2 系统设计2.2.1 系统功能模块2.2.2 数据库设计 3 系统实现3.1 数据模型3.1.1 NewsURL3.1.2 NewsType3.1.3 NewsInfo 3.2 数据库操作3.2.1 DBOpenHelper3.2.2 DBManager 3.3 适配器类3.3.1 AddItem3.3.2 In…

Python+PyCharm安装(最新)

目录 1.Python和PyCharm简介 2.环境检测 3.Python下载与安装 3.1Python下载 3.2Python安装 3.3python测试 4.PyCharm下载与安装 4.1PyCharm下载 4.2PyCharm安装 4.3PyCharm测试 4.4PyCharm应用 5.注意事项 5.1更新pip 5.2安装库 ​5.3查看已安装的库 6.总结 1.Py…

HAL库中的三种延时函数HAL_Delay、vTaskDelay和vTaskDelayUntil的区别

1、HAL_Delay() 阻塞型延时&#xff0c;实现方式是通过死循环方式实现的&#xff0c;不会释放掉cpu&#xff0c;会造成其他低优先级任务无法执行 2、vTaskDelay() 相对延时函数 void vTaskDelay(TickType_t xTicksToDelay); 相对延时函数:相对延时是指每次延时都是从任务执行…

基于三维地籍的全生命周期“一码管地”

随着国土空间治理现代化的不断推进&#xff0c;如何实现土地资源的高效管理和利用&#xff0c;成为了一个重要课题。今天&#xff0c;我们将探讨一种创新的土地管理模式——基于三维地籍的全生命周期“一码管地”。 一、土地管理面临的挑战 传统的土地管理模式存在信息孤岛、…

《Pure Transformers are Powerful Graph Learners》NIPS2022

摘要 论文展示了标准Transformer模型&#xff0c;无需针对图数据的特定修改&#xff0c;就可以在图学习领域取得有希望的结果&#xff0c;无论是在理论还是实践上。作者提出&#xff0c;通过将图中的所有节点和边视为独立的token&#xff0c;并通过适当的token嵌入增强它们&am…

C++初阶学习第六弹------标准库中的string类

目录 一.标准库中的string类 二.string的常用接口函数 2.1string类对象的构造 2.2 string的容量操作 2.3 string类的访问与遍历 2.4 string类对象的修改 2.5 string类常用的非成员函数 三、总结 一.标准库中的string类 可以简单理解成把string类理解为变长的字符数组&#x…

Linux运维篇-tigervnc工具的使用

目录 简介下载使用clientserver配置文件服务管理 设定密码&#xff08;先切换成对应的用户&#xff09;&#xff1a;配置多用户的VNC tigervnc连接排错一、vnc密码错误二、vncserver端口忘记了三、连接很卡&#xff0c;或者画面没有反应四、服务报错 简介 TigerVNC是VNC的一种…

Java语言程序设计基础篇_编程练习题*18.29(某个目录下的文件数目)

题目&#xff1a;*18.29(某个目录下的文件数目) 编写一个程序&#xff0c;提示用户输入一个目录&#xff0c;然后显示该目录下的文件数。 和上一题(18.28)的思路差不多&#xff0c;把找到文件后累加大小到变量变成计数1即可。 Java语言程序设计基础篇_编程练习题*18.28 (非递…

光莆亮相第25届中国国际光博会(CIOE2024)

“光引未来&#xff0c;驱动创新” 2024年9月11-13日&#xff0c;第25届中国国际光电博览会(CIOE2024)在深圳国际会展中心(宝安新馆)隆重开幕。作为国家商务部首批重点展览会&#xff0c;CIOE2024聚焦科研成果转化&#xff0c;推动产学研用深度融合&#xff0c;光电行业全产业…

【海康威视面经】

海康威视面经 Java基础java常用集合 及其优缺点ArrayListVectorLinkedList Jvm调优监控发现问题工具分析问题 &#xff1a;性能调优GC频繁 出现内存泄漏 内存溢出CPU飙升 Synchronized和Volatile的比较反射线程池和new thread利弊高并发 集群 分布式 负载均衡 MySQL调优基础优化…

探索Python中文拼音转换的奥秘:xpinyin库

文章目录 **探索Python中文拼音转换的奥秘&#xff1a;xpinyin库**背景介绍库简介安装指南函数使用示例应用场景常见问题与解决方案总结 探索Python中文拼音转换的奥秘&#xff1a;xpinyin库 背景介绍 在处理中文文本数据时&#xff0c;我们经常需要将中文字符转换为拼音。无…

TS Vue项目中使用TypeScript

模块系统与命名空间 概念 模块化开发是目前最流行的组织代码方式&#xff0c;可以有效的解决代码之间的冲突与代码之间的依赖关系&#xff0c;模块系统一般视为“外部模块”&#xff0c;而命名空间一般视为“内部模块” 模块系统 TS中的模块化开发跟ES6中的模块化开发并没有…

22 C 语言字符处理:分类判断与转换(ASCII 码、字母大小写)函数详解

目录 1 isdigit() 1.1 函数原型 1.2 功能说明 1.3 代码示例 2 isxdigit() 2.1 函数原型 2.2 功能说明 2.3 代码示例 3 islower() 3.1 函数原型 3.2 功能说明 3.3 代码示例 4 isupper() 4.1 函数原型 4.2 功能说明 4.3 代码示例 5 isalnum() 5.1 函数原型 5.…

MySQL索引知识个人笔记总结

本篇笔记是个人整理的索引知识总结&#xff0c;刚开始有点乱&#xff0c;后续会一直边学边整理边总结 索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构(有序)。就好比索引就是数据的目录 索引结构 Btree索引,Hash索引,Full-text索引&#xff0c;R-tree(空…

L67 【哈工大_操作系统】操作系统历史 学习任务

L6 操作系统历史 线条一 1、上古神机 IBM7094 专注于计算批处理操作系统&#xff08;Batch system&#xff09; 2、OS/360 一台计算机干多种事&#xff0c;多道程序作业之间的 切换和调度 成为核心 &#xff08;多进程结构和进程管理概念萌芽&#xff01;&#xff09; 3…

关于Java数据结构中集合的一个小知识

在我们以后刷题的过程&#xff0c;我们会遇到一些奇怪的集合数据类型。 如下图 这里&#xff0c;我们以顺序表的集合类为例&#xff0c;我们看到上图函数的返回值类型有点奇怪&#xff0c;其实并不奇怪&#xff0c;也就是穿过去的参数类型是一个顺序表的集合类型&#xff0c;也…

Mysql高级篇(中)—— SQL优化

SQL优化 一、SQL优化的计划或思路二、关联查询优化三、子查询优化四、exists 和 not exists1、exists 介绍2、exists 和 not exists 五、单路排序和多路排序&#xff08;了解&#xff09;六、排序分组优化1、order by&#xff08;1&#xff09;避免临时排序,使用索引排序&#…

【LabVIEW】条件结构的使用

本篇文章记录LabVIEW条件结构的使用方法&#xff0c;希望我的分享能对你有所帮助&#xff01; 一、实践项目 二、工程详解 1、考虑到输入的数值需要判断一下是否是在0-100之间&#xff0c;故使用“判定范围并强制转换”模块 2、设置数值表示法和上下限 3、验证判断 4、最终程…

(黑马点评)二、短信登录功能实现

2.1 基于传统Session实现的短信登录及其校验 2.1.1 基于Session登录校验的流程设计 2.1.2 实现短信验证码发送功能 请求接口/user/code请求类型post请求参数phone返回值无 /*** 发送手机验证码*/PostMapping("/code")public Result sendCode(RequestParam("ph…

前端框架对比和选择

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; 前端框架选择是前端开发中的关键决策&#xff0c;因为它影响项目的开发效率、维护成本和可扩展性。当前&#xff0c;最流行的前端框架主要包括 React、Vue 和 Angular。它们各有优劣&#xff0c;适用于不同…