Mybatis中的缓存

news2024/9/21 4:21:51

一,为什么要使用缓存

1,缓存的作用

        缓存(cache)的作用是为了减去数据库的压力,提高查询性能
缓存实现的原理是
从数据库中查询出来的对象在使用完后不要销毁,而是存储在内存(缓存)
中,当再次需要获取该对象时,直接从内存(缓存)中直接获取,不再向数据库
执行 select 语句从而减少了对数据库的查询次数,因此提高了数据库的性能。

2,Mybatis中的缓存

Mybatis 有一级缓存和二级缓存。
一级缓存的作用域是同一个 SqlSession,
在同一个 sqlSession 中两次执行相同的 sql 语句,第一次执行完毕会将数据库
中查询的数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查
询,从而提高查询效率。当一个 sqlSession 结束后该 sqlSession 中的一级缓存
也就不存在了。Mybatis 默认开启一级缓存。
二级缓存是多个 SqlSession 共享的,其作用域是同一个 namespace,不同的
sqlSession 两次执行相同 namespace 下的 sql 语句且向 sql 中传递参数也相同
即最终执行相同的 sql 语句,第一次执行完毕会将数据库中查询的数据写到缓存
(内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。
Mybatis 默认没有开启二级缓存需要在 setting 全局参数中配置开启二级缓存。

(1)一级缓存

Mybatis 对缓存提供支持,但是在没有配置的默认情况下,它只开启一级缓
存,一级缓存只是相对于同一个 SqlSession 而言
所以在参数和 SQL 完全一样的情况下,我们使用同一个 SqlSession 对象调
用一个 Mapper 方法,往往只执行一次 SQL,因为使用 SelSession 第一次查询
后,MyBatis 会将其放在缓存中,以后再查询的时候,如果没有声明需要刷新,
并且缓存没有超时的情况下,SqlSession 都会取出当前缓存的数据,而不会再
次发送 SQL 到数据库。

(2)二级缓存

二级缓存是 SqlSessionFactory 级别的,根据 mapper 的 namespace 划分
区域的,相同 namespace 的 mapper 查询的数据缓存在同一个区域,如果使
用 mapper 代理方法每个 mapper 的 namespace 都不同,此时可以理解为二
级缓存区域是根据 mapper 划分。
每次查询会先从缓存区域查找,如果找不到则从数据库查询,并将查询到数
据写入缓存
Mybatis 内部存储缓存使用一个 HashMap,key 为 hashCode+sqlId+Sql 语句。
value 为从查询出来映射生成的 java 对象。
sqlSession 执行 insert、update、delete 等操作 commit 提交后会清空缓存区
域,防止脏读。二级缓存参考下图所示:
                MyBatis 的缓存机制整体设计以及二级缓存的工作模式

(3)配置二级缓存配置

第一步:启用二级缓存
        在 SqlMapperConfig.xml 中启用二级缓存,如下代码所示,当
cacheEnabled 设置为 true 时启用二级缓存,设置为 false 时禁用二级缓存。
        <setting name="cacheEnabled" value="true"/>
第二步:对象序列化
        将所有的 POJO 类实现序列化接口 Java.io. Serializable。
第三步:配置映射文件
        在 Mapper 映射文件中添加<cache />,表示此 mapper 开启二级缓存。
当 SqlSeesion 关闭时,会将数据存入到二级缓存.

二,MyBatis 架构

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

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

相关文章

zipkin启动发生报错 : Failed to start bean ‘armeriaServerGracefulShutdownLifecycle‘;

报错详情 : 在windows下启动zipkin的时候发生报错 : Failed to start bean ‘armeriaServerGracefulShutdownLifecycle’;nested exception is java.util.concurrent.CompletionException: java.lang.IllegalStateException: Armeria server failed to start解决 : 由于z…

SSM网上书店--附源码96453

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于网上书店当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了网上书店&#xff0c;它彻底改变了过去传统的管理方式…

安装cvxpy时遇到“subprocess-exited-with-error”的解决方式

尝试联邦学习时&#xff0c;遇到了这个问题&#xff0c;但实际上仔细看报错就能找到源头 ①更新cmake版本到3.17 参考此文即可更新 https://blog.csdn.net/why1249777255/article/details/138505546 【报错点中“Found CMake:…………”这一行&#xff0c;在不满足要求时会说…

信息学奥赛一本通编程启蒙(不断更新ing~)

可以作为c初学者的练习题&#xff0c;我会挑选有部分有代表意义的题目作为学生的课后作业&#xff0c;后面会在专栏中陆续更新题目解析&#xff0c;并附在这一篇文章的链接中 信息学奥赛一本通-编程启蒙&#xff08;C版&#xff09;在线评测系统 https://bas.ssoier.cn/index…

安全升级,智启未来!广东工业安全生产数智化转型闭门分享会圆满举办

8月26日&#xff0c;由华为技术有限公司&#xff08;以下简称“华为”&#xff09;与广州英码信息科技有限公司&#xff08;以下简称“英码科技”&#xff09;联合主办&#xff0c;广东省应急产业协会为支持单位的“广东工业安全生产数智化转型闭门分享会”在广州圆满举行。本次…

整合优化方案即将批复,您准备好了吗?

在自然保护地管理的新时代&#xff0c;规划编制的复杂性和高要求常常让各级管理者和规划者面临重重挑战。整合优化方案即将批复&#xff0c;规划任务将十分繁重&#xff01;为了应对这些难题&#xff0c;“自然保护地总体规划智能编制系统”应运而生&#xff0c;旨在为规划编制…

iPhone短信误删如何恢复,四种方法找回短信

在日常使用手机的过程中&#xff0c;我们可能会因为误操作或其他原因不小心删除了重要的短信。这些短信可能包含了工作沟通、家人关怀或朋友间的温馨对话&#xff0c;一旦丢失&#xff0c;难免让人感到焦虑和不安。不过&#xff0c;别担心&#xff0c;针对iPhone短信误删的问题…

Java开发者的专业显示器推荐-明基RD280U

哈喽&#xff0c;小伙伴们好呀&#xff0c;我混编程界已经好几年了&#xff0c;搞了这么多年的Java&#xff0c;换了好几家公司&#xff0c;有的公司发电脑&#xff0c;有的公司发笔记本&#xff0c;有的还发主机&#xff0c;不过你们有没有注意到一个普遍的问题&#xff0c;公…

金融工程--基于akshare的数据获取

背景 在进行金融工程和量化交易的时候&#xff0c;如何获取准确的数据来为我们模型和后期的判断提供支撑和依据成为了比较关键的一个点。对这个问题有几个方面的要求。第一&#xff0c;获取的数据的准确性&#xff0c;第二&#xff0c;大批量数据获取的接口稳定程度&#xff0…

Trivy 工具:开启高效漏洞检测之旅

在网络安全日益重要的今天&#xff0c;及时发现系统和应用中的漏洞成为了保护企业和个人信息安全的关键。而 Trivy 工具&#xff0c;就如同您手中的一把利剑&#xff0c;能够精准地刺破漏洞的伪装&#xff0c;为您的网络世界保驾护航。 Trivy 是一款功能强大、易于使用且开源的…

信息学奥赛初赛天天练-76-NOIP2015普及组-基础题1-计算机存储、硬件系统、操作系统、进制转换、二进制加法

NOIP 2016 普及组 基础题1 1 1MB 等于 ( ) A 10000 字节 B 1024 字节 C 10001000 字节 D 10241024 字节 2 在 PC 机中&#xff0c;PENTIUM&#xff08;奔腾&#xff09;、酷睿、赛扬等 是指( ) A 生产厂家名称 B 硬盘的型号 C CPU 的型号 D 显示器的型号 3 操作系统的作用是…

关于用列表append字典数据却一直重复问题

关于python用列表append字典数据却一直重复问题 用列表append添加字典数据却一直重复最后一个理解了上面的内容之后&#xff0c;我们再回到最初的问题解决方法 用列表append添加字典数据却一直重复最后一个 以下是我们的代码&#xff1a; def parse_data(data):parse_dict d…

卡在恢复模式怎么办?这样操作一键轻松退出iPhone 恢复模式

iOS 18beta版本发布后&#xff0c;已经成功升级到iOS 18beta并享受新功能的小伙伴们真是太幸运了。但是还有一些小伙伴在更新iOS 18beta的过程中遇到了各种问题&#xff0c;比如iPhone卡在恢复模式是常见问题。如果你也遇到此问题&#xff0c;不要着急&#xff0c;接下来我们将…

qt生成uid

QUuid 是 Qt 库中的一个类&#xff0c;用于生成和处理全局唯一标识符&#xff08;UUID&#xff09;。UUID 是一种128位的标识符&#xff0c;通常用于唯一标识对象&#xff0c; #include <QUuid> QString uid QUuid::createUuid().toString(QUuid::WithoutBraces);QUuid…

自动生成文章的软件,提升文章写作体验非常棒

在这个信息时代&#xff0c;文章写作是少不了的&#xff0c;然而文章写作对于每个人来说却是一件耗时费力的事情&#xff0c;但随着技术的发展&#xff0c;自动生成文章的软件的出现让文章写作变得尤为简单&#xff0c;它不仅可以节省大家的写作时间&#xff0c;而且还能提高写…

专门康复自闭症儿童学校哪里有?

在探索自闭症儿童康复教育的道路上&#xff0c;家长们总是希望为孩子找到最专业、最可靠的康复机构。在众多选择中&#xff0c;广州市星贝育园康复中心以其独特的优势和显著的康复效果脱颖而出&#xff0c;成为了成为众多家庭信赖的自闭症儿童康复学校。 星贝育园康复中心&…

交换机原理与配置

目录 一、数据链路层的功能 1.1 1.2以太网mac地址 二、以太网帧 2.1udp帧&#xff0c;ip数据报&#xff0c;以太网帧格式 2.2以太网帧格式 2.3ip数据报格式 三、交换机的工作原理 3.1 四、交换机的命令行配置 4.1命令行的层次结构 4.2 &#xff1f;的作用 4.3 tab键…

c++83 结构体深copy与浅copy

typedef struct Teacher {char name[64];int age;char* pname2;//结构体里套用指针 }Teacher;void copyTeacher(Teacher* to, Teacher* from) {//*to *from;memcpy(to, from, sizeof(Teacher));//完成一次copy 同理t2释放内存 } void main() {Teacher t1;Teacher t2;strcpy(t1…

机器视觉-2 缺陷检测常见场景与常用检测方法

目录 目录 一、缺陷检测常见场景 二、缺陷检测常用方法 1. 单调背景 方法1: 阈值分割 方法2: 差分法 2. 规则纹理背景 方法1: 模板匹配 方法2: Gabor滤波器 方法3&#xff1a;傅里叶变换 3. 无规则图像 方法1: 边缘检测 轮廓检测 方法2: 图像分割&#xff08;如Watershed算法&…

PHP 全攻略:从环境搭建到实战项目的深度探索

一、引言 PHP&#xff08;Hypertext Preprocessor&#xff09;是一种广泛应用于 Web 开发的服务器端脚本语言。它具有简单易学、功能强大、开源免费等特点&#xff0c;被众多开发者和企业所青睐。本文将详细介绍 PHP 的开发环境搭建、基本语法格式、变量与变量作用域、常量与数…