Mybatis-MyBatis的缓存
Mybatis-MyBatis的缓存
- 一、MyBatis的一级缓存
- 二、MyBatis的二级缓存
- 二级缓存的相关配置
- 三、MyBatis缓存查询的顺序
一、MyBatis的一级缓存
一级缓存是SqlSession级别的,通过同一个SqlSession查询的数据会被缓存,下次查询相同的数据,就
会从缓存中直接获取,不会从数据库重新访问
使一级缓存失效的四种情况:
- 不同的SqlSession对应不同的一级缓存
- 同一个SqlSession但是查询条件不同
- 同一个SqlSession两次查询期间执行了任何一次增删改操作
- 同一个SqlSession两次查询期间手动清空了缓存
@Testpublic void testCache() throws IOException {InputStream is = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);SqlSession sqlSession1 = sqlSessionFactory.openSession(true);CacheMapper mapper1 = sqlSession1.getMapper(CacheMapper.class);Emp emp1 = mapper1.getEmpById(1);System.out.println(emp1);Emp emp2 = mapper1.getEmpById(1);System.out.println(emp2);}

二、MyBatis的二级缓存
二级缓存是SqlSessionFactory级别,通过同一个SqlSessionFactory创建的SqlSession查询的结果会被
缓存;此后若再次执行相同的查询语句,结果就会从缓存中获取
二级缓存开启的条件:
a>在核心配置文件中,设置全局配置属性cacheEnabled=“true”,默认为true,不需要设置
b>在映射文件中设置标签

c>二级缓存必须在SqlSession关闭或提交之后有效
d>查询的数据所转换的实体类类型必须实现序列化的接口
使二级缓存失效的情况:
两次查询之间执行了任意的增删改,会使一级和二级缓存同时失效
@Testpublic void testCache() throws IOException {InputStream is = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);SqlSession sqlSession1 = sqlSessionFactory.openSession(true);CacheMapper mapper1 = sqlSession1.getMapper(CacheMapper.class);Emp emp1 = mapper1.getEmpById(1);System.out.println(emp1);sqlSession1.close();SqlSession sqlSession2 = sqlSessionFactory.openSession(true);CacheMapper mapper2 = sqlSession2.getMapper(CacheMapper.class);Emp emp2 = mapper2.getEmpById(1);System.out.println(emp2);sqlSession2.close();}

二级缓存的相关配置
①eviction属性:缓存回收策略,默认的是 LRU。
LRU(Least Recently Used) – 最近最少使用的:移除最长时间不被使用的对象。
FIFO(First in First out) – 先进先出:按对象进入缓存的顺序来移除它们。
SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象
WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。
②flushInterval属性:刷新间隔,单位毫秒
默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句时刷新
③size属性:引用数目,正整数
代表缓存最多可以存储多少个对象,太大容易导致内存溢出
④readOnly属性:只读, true/false
true:只读缓存;会给所有调用者返回缓存对象的相同实例。因此这些对象不能被修改。这提供了 很重要的性能优势。
false:读写缓存;会返回缓存对象的拷贝(通过序列化)。这会慢一些,但是安全,因此默认是
false。
三、MyBatis缓存查询的顺序
先查询二级缓存,因为二级缓存中可能会有其他程序已经查出来的数据,可以拿来直接使用。
如果二级缓存没有命中,再查询一级缓存
如果一级缓存也没有命中,则查询数据库
SqlSession关闭之后,一级缓存中的数据会写入二级缓存
相关文章:
Mybatis-MyBatis的缓存
Mybatis-MyBatis的缓存 一、MyBatis的一级缓存二、MyBatis的二级缓存二级缓存的相关配置 三、MyBatis缓存查询的顺序 一、MyBatis的一级缓存 一级缓存是SqlSession级别的,通过同一个SqlSession查询的数据会被缓存,下次查询相同的数据,就 会从…...
计算机组成原理之硬件的基本组成,深入介绍两大计算机结构体系,从底层出发认识计算机。
大家好,欢迎阅读《计算机组成原理》的系列文章,本系列文章主要的内容是从零学习计算机组成原理,内容通俗易懂,大家好好学习吧!!! 更多的优质内容,请点击以下链接查看哦~~ ↓ ↓ ↓ …...
二十五、MySQL事务的四大特性和常见的并发事务问题
1、事务的四大特性 2、常见的并发事务问题 (1)并发事务问题分类: (2)脏读: 一个事务正在对一条记录做修改,在这个事务完成并提交前,这条记录的数据就处于不一致的状态;…...
辨析常见的医学数据分析(相关性分析回归分析)
目录 1 常见的三种分类结果? 2 什么是相关性分析? 相关性分析的结果怎么看? 3 什么是回归分析? 1)前提 2)常见的回归模型 4 对于存在对照组实验的医学病例如何分析? 1)卡方检验…...
SpringBoot项目中只执行一次的任务写法
SpringBoot项目中只执行一次的任务写法 有时候我们需要进行初始化工作,就说明只要进行一次的工作,那么,在Springboot项目中如何做到任务只进行一次呢 利用定时任务 在Spring Boot项目中,你可以使用Spring框架提供的Scheduled注解…...
TCK、TMS、TDI、TDO的含义
这四个信号是JTAG(Joint Test Action Group)界面的一部分。JTAG是一种用于测试和验证集成电路和印刷电路板的技术,也用于进行设备编程和调试。这四个信号分别是: TCK (Test Clock): 意义:测试时钟ÿ…...
R语言RSTAN MCMC:NUTS采样算法用LASSO 构建贝叶斯线性回归模型分析职业声望数据...
全文链接:http://tecdat.cn/?p24456 如果你正在进行统计分析:想要加一些先验信息,最终你想要的是预测。所以你决定使用贝叶斯(点击文末“阅读原文”获取完整代码数据)。 相关视频 但是,你没有共轭先验。你…...
【PowerShell】PowerShell的Core版本的额外配置
在PowerShell 7.1 安装完成后,默认情况下打开PowerShell 会直接进入到系统内置的PowerShell,如果希望通过远程连接或者PowerShell Web Access 进入到PowerShell 7环境的界面,就需要进行环境的再配置才能实现PowerShell 7.1 的环境连接。需要为外部的环境提供连接的话需要按照…...
数据结构----链式栈
目录 前言 链式栈 操作方式 1.存储结构 2.初始化 3.创建节点 4.判断是否满栈 5.判断是否空栈 6.入栈 7.出栈 8.获取栈顶元素 9.遍历栈 10.清空栈 完整代码 前言 前面我们学习过了数组栈的相关方法,(链接:线性表-----栈(栈…...
实在智能携手40+央企,探索财务大模型及数智化实践与应用
“这次培训给我一个最大的感触就是,过去以为AI智能化、大模型技术是很高深的事情。但现在,我们通过RPA等数字化工具,自主根据自己的工作岗位,完成业务自动化流程的开发和设计。AI技术没有想象中的那么难入门。” 这是一位参加了“…...
upload-labs文件上传1-5关
第一关 编写一句话木马1.php,编写完成后将后缀名修改为png 将1.png上传,上传时使用bp抓包 抓包后将后缀名修改为png 连接蚁剑 第二关 上传1.php,显示文件类型不正确 使用bp抓包发送重发器,修改文件后缀名后点击发送,…...
git的基本使用
查看当前分支 git branch //查看本地分支 git branch -a // 查看本地和远程的分支切分支 git checkout -b 分支的名字从当前分支切换到其他分支 拉取远程分支到本地 拉取远程develop分支代码到本地develop分支 git checkout -b develop origin/developgit merge B分支合并…...
Mac台式电脑内存清理方法教程
对于一些小白用户,如果觉得以上的清理方法比较复杂却又想要更好的优化Mac电脑内存,专业的系统清理软件是一个不错的选择。比起花几个小时时间浏览文件夹、删除临时文件、缓存和卸载残留。Cleanmymac X,只需单击几下即可完成所有内存清理工作&…...
FL Studio怎么破解?2023年最新FL Studio 21图文安装激活教程?FL 21中文版下载 v21.1.1.3750 汉化 版
fl studio21中文解锁特别破解版是一款功能强大的编曲软件,也就是众所熟知的水果软件。它可以编曲、剪辑、录音、混音,让您的计算机成为全功能录音室。除此之外,这款软件功能非常强大,为用户提供了许多音频处理工具,包含…...
Zookeeper高级_四字命令
之前使用stat命令来验证ZooKeeper服务器是否启动成功,这里的stat命令就是ZooKeeper 中最为典型的命令之一。ZooKeeper中有很多类似的命令,它们的长度通常都是4个英文字母,因此我们称之为“四字命令”。 添加配置 vim zoo.cfg 4lw.commands…...
/usr/bin/ld: cannot find -lmysqlcllient
文章目录 1. question: /usr/bin/ld: cannot find -lmysqlcllient2. solution 1. question: /usr/bin/ld: cannot find -lmysqlcllient 2. solution 在 使用编译命令 -lmysqlclient时,如果提示这个信息。 先确认一下 有没有安装mysql-devel 执行如下命令 yum inst…...
折线图geom_line()参数选项
往期折线图教程 图形复现| 使用R语言绘制折线图折线图指定位置标记折线图形状更改 | 绘制动态折线图跟着NC学作图 | 使用python绘制折线图 前言 我们折线的专栏推出一段时间,但是由于个人的原因,一直未进行更新。那么今天,我们也参考《R语…...
百度SEO优化基本原理(掌握SEO基础,提高网站排名)
随着互联网的迅速发展,越来越多的企业开始意识到网站优化的重要性,其中百度SEO优化是企业不可忽视的一项工作。本文将介绍百度SEO优化的基本概念、步骤、原理、解决方法和提升网站标题优化的方法。蘑菇号-www.mooogu.cn 百度SEO优化是指针对百度搜索引擎…...
2023 ICPC 网络赛 第一场 部分题解 (待完善)
D Transitivity 题解: 根据题意可以推出结论: 如果存在连通块,那么这个连通块要满足条件,必然是满连通块. 一共有两种情况 1. 存在一个连通块不是满连通块 设cnt表示连通块的节点个数, num表示连通块边的个数 一个连通块的贡献 cnt*(cnt-1)/2 - num; 那么最终答案 连…...
Hadoop的HDFS高可用方案
一、Hadoop高可用简介 Hadoop 高可用 (High Availability) 分为 HDFS 高可用和 YARN 高可用,两者的实现基本类似,但 HDFSNameNode 对数据存储及其一致性的要求比 YARN ResourceManger 高得多,所以它的实现也更加复杂 1、HDFS系统高可用简介…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
