Mybatis中的缓存

一,为什么要使用缓存

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.rhkb.cn/news/413380.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能指针(RAII)

智能指针&#xff08;RAII&#xff09; 一、内存泄漏1、介绍2、原因3、泄漏的内存类型分类 二、RAII1、介绍2、基本思想3、优点4、实现方式 三、unique_ptr1、介绍2、主要特性3、注意事项4、unique_ptr类5、示例代码6、运行结果7、简单实现 四、shared_ptr1、介绍2、主要特点3、…

单自由度无阻尼系统振动分析

特别感谢&#xff1a;https://www.bilibili.com/video/BV114411y7ab/?p6&spm_id_frompageDriver&vd_sourceebe07816bf845358030fc92d23830b29 本文图片该系列视频 tips&#xff1a;关于特征方程与振动方程&#xff1a; 特征方程有助于我们理解和确定系统的固有频率和模…

C语言基础(二十)

链表是一种常见的数据结构&#xff0c;通常用来存储一系列元素&#xff0c;每个元素由一个节点来表示。在链表中&#xff0c;每个节点包含两部分&#xff1a;数据元素本身和指向下一个节点的指针。这种结构使得链表中的元素在内存中不是连续存储的&#xff0c;而是通过指针连接…

随笔九、SARADC按键程控测试

目录 1. 泰山派环境 2. 按键3分析 3. 编程测试 1. 泰山派环境 泰山派开发板上有3个按键 按键1是电源按键PWRON&#xff0c;实测按几下会导致开发板重启 按键2是复位按键RESET&#xff0c;按下立马复位重启 按键3是升级按键RECOVER&#xff0c;配合RESET按键可以使开发板进…

Unity编辑器扩展之Scene视图扩展

内容将会持续更新&#xff0c;有错误的地方欢迎指正&#xff0c;谢谢! Unity编辑器扩展之Scene视图扩展 TechX 坚持将创新的科技带给世界&#xff01; 拥有更好的学习体验 —— 不断努力&#xff0c;不断进步&#xff0c;不断探索 TechX —— 心探索、心进取&#xff01; …

使用cJSON进行JSON文件读写

推荐cJSON下载地址&#xff1a; Git地址&#xff1a;https://github.com/arnoldlu/cJSON 可以尝试&#xff1a;sudo apt-get install libcjson-dev&#xff0c;笔者未使用该方式。 百度AI搜索程序&#xff0c;供参考&#xff0c;部分函数名称应以cJSON模块内定义为主 json文…

游泳耳机哪个牌子的好?四大口碑精品游泳耳机专业推荐!

在追求健康生活的同时&#xff0c;游泳成为了许多人选择的锻炼方式。它不仅能够帮助人们塑造身材&#xff0c;还能有效缓解压力。而在游泳过程中&#xff0c;音乐的陪伴无疑能让人更加享受这段时光。因此&#xff0c;一款适合游泳时使用的耳机&#xff0c;成为了游泳爱好者们不…

CSS学习笔记(01)flex布局

1、首先对父元素设置disiplay&#xff1a;felx&#xff0c; 其有6个属性 fex-direction:设置主轴的方向 justify-content:设置主轴上的子元素排列方式 flex-wrap:设置子元素是否换行 align-content:设置侧轴上的子元素的排列方式(多行) align-items:设置侧轴上的子元素排列方式…

前端性能优化:提升网站加载速度的五个关键技巧

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介前端性能优化&#xff1a;提升网站加载速度的五个关键技巧1. 引言2. 前端性能优化的五个关键技巧2.1 减少HTTP请求技巧说明实现示例 2.2 启用浏览器缓存技巧说明实现示例 2.3 使用内容分发网络&#xff08;CDN&#xff09;技巧说明…

8.27FLEX,BISON

RC ParseStage::handle_request(SQLStageEvent *sql_event) 这个意思是返回类型是RC&#xff0c;然后用到的函数来自 ParseStage&#xff0c;&#xff1a;&#xff1a;就是用来标识作用域的&#xff0c;函数名是handle_request&#xff0c;是ParseStage里的函数 FLEX BISON

一个浏览器插件如何月入12万美元:深入了解 GoFullPage

一个浏览器插件如何月入12万美元&#xff1a;深入了解 GoFullPage 前言 GoFullPage 这个插件的诞生&#xff0c;源于其创作者 Peter Coles 的一个简单想法&#xff1a;解决一个他在日常开发工作中遇到的痛点。早在 2012 年&#xff0c;Coles 发现许多现有的网页截图工具无法完…

x264 编码器 AArch64汇编系列:zigzag 扫描相关汇编函数

zigzag 在x264_zigzag_init函数中初始化具体的 zigzag 实现函数: 以scan_4x4为例 c 语言实现 4x4 变换块扫描:zigzag_scan_4x4_frame。#define ZIGZAG4_FRAME\ZIGDC( 0,

ssh远程连接服务

1、概述 一种安全访问远程服务器的协议&#xff0c;远程管理工具&#xff0c;通过加密方式管理连接&#xff0c;使服务器更安全。 2、加密算法 对称加密 发送密码前将密码数据加密成密文&#xff0c;然后发送出去 接收方收到密文后&#xff0c;使用同一个密钥将密文解密。…

windows安全中心永久卸载工具分享

使用方法 博客&#xff1a;h0ck1r丶羽~从零到一 卸载工具下载链接&#xff1a; 夸克网盘分享 一路回车&#xff0c;选项Y即可 耐心等待几秒种&#xff0c;自动重启 此时打开windows安全中心&#xff0c;已经完全不能使用了&#xff0c;响应的杀毒功能也关了 往期推荐 【渗透测…

【STM32】RTT-Studio中HAL库开发教程五:UART的DMA应用

文章目录 一、简介1.关于DMA2.DMA使用场景3.DMA控制结构4.IDLE空闲中断5.实现方法 二、RTT配置三、串口收发流程四、完整代码五、测试验证 一、简介 1.关于DMA DMA(Direct Memory Access&#xff0c;直接存储器访问) 是所有现代电脑的重要特色&#xff0c;它允许不同速度的硬件…

python办公自动化:PPT工具之`Python-PPTX`简介

第1章 简介 1.1 什么是Python-PPTX库&#xff1f; Python-PPTX库是一个用于创建和修改Microsoft PowerPoint (.pptx) 文件的Python库。它提供了一个易于使用的API&#xff0c;使得开发者能够以编程方式操纵PowerPoint文件&#xff0c;包括创建新文件、修改现有文件、添加文本…

2024最新最全面的JMeter 做接口加密测试

JMeter 怎么做接口的加密&#xff1f; JMeter如果需要做加密测试&#xff0c;是需要加密类型对应的jar包的。本文以MD5,加密作为教程。 1、在Test Plan 引用jar包&#xff1b; 2、添加BeanShell Sampler取样器&#xff0c;并输入调用代码 import md5.mymd5;//调用jar包 String…

Excel技巧(二)

函数 SUMIFS函数 用于计算其满足多个条件的全部参数的总量 语法&#xff1a;SUMIFS(sum_range, criteria_range1, criteria1, [criteria_range2, criteria2], ...) COUNTIFS函数 计算多个区域中满足给定条件的单元格的个数 语法&#xff1a;countifs(criteria_range1,crit…

翻译软件 Fastrans 开发日志 #2

就过了几天&#xff0c;我的 Fastrans 项目&#xff08; https://github.com/YaoqxCN/Fastrans &#xff09;又更新了两个版本&#xff0c;现在是 v1.1.1。&#xff08;求个 star 谢谢&#xff01;&#xff09; 上次我初步实现了 Fastrans 的翻译功能以及 UI&#xff0c;可以看…

平衡膳食与健康 第二篇

健康,不止于不生病. 不良的生活方式 瞎折腾 影响身体健康 实际上健康还包括在其他方面 精神方面 社会接触能力大夫问题复盘 慢性疾病&#xff0c;都是生活方式病 慢性病与生活方式密切相关 还有心理问题**:焦虑症,抑郁症** 健康医学和疾病医学差距 压健康状态比例 肚…