MyBatis:缓存

MyBatis

  • 缓存
    • 一级缓存
    • 二级缓存

在这里插入图片描述

缓存

缓存,是数据交换的缓冲区(临时保存数据的地方)。即将数据(数据一般为频繁查询且不易改变)保存在计算机内存中,下次读取数据时直接从内存中获取,以避免频繁的访问数据库或磁盘文件,从而提高程序性能。

MyBatis 缓存,是 MyBatis 提供的一种优化机制,用于提高查询效率和减少与数据库的交互次数。在 MyBatis 缓存中,分为一级缓存二级缓存

一级缓存

一级缓存,是 SqlSession 级别的缓存。即在同一个 SqlSession 中,查询结果会被缓存,以供后续的查询直接使用。在 MyBatis 缓存中,只默认开启一级缓存,而二级缓存需要手动配置开启。另外,一级缓存之间是互相独立的缓存空间,不能通信。

简单示例:
1.使用同一个 SqlSession 中,第一次获取查询结果后再次进行相同的查询,只执行一次 SQL 语句
在这里插入图片描述

查看日志,结果如图:
在这里插入图片描述

2.使用同一个 SqlSession 中,第一次获取查询结果后再次进行不同的查询,执行了两次 SQL 语句(缓存中没有找到对应的结果,所以执行 SQL 语句从数据库中查找数据。当然,找到后也会放入缓存中)
在这里插入图片描述

查看日志,结果如图:
在这里插入图片描述

同一个 SqlSession 下也执行了两次 SQL 语句的其他情况:
(1)使用同一个 SqlSession 中,第一次获取查询结果后再次进行相同的查询,但两次查询之间进行清空缓存(sqlSession.clearCache();)
(2)使用同一个 SqlSession 中,第一次获取查询结果后再次进行相同的查询,但两次查询之间进行增改删操作(缓存会刷新)

3.使用不同的 SqlSession 进行相同的两次查询,执行了两次 SQL 语句
在这里插入图片描述

查看日志,结果如图:
在这里插入图片描述

二级缓存

二级缓存(全局缓存),是 mapper 级别的缓存。即可以跨越多个 SqlSession ,允许在不同的 SqlSession 之间共享查询结果,但需要在 mapper 文件中进行配置。在开启二级缓存情况下,一级缓存的数据会在会话提交或关闭前转存到二级缓存中。

简单示例:
首先,手动配置开启二级缓存。这需要在全局配置文件 mybatis.xml 中的 settings 标签内添加开启配置

<!-- 开启二级缓存 -->
<setting name="cacheEnabled" value="true"/>

接着,映射文件中需要添加 < cache /> 标签

<!-- 开启二级缓存 -->
<cache />

然后,实体类必须实现序列化接口(implements Serializable)
在这里插入图片描述

最后,测试结果。使用不同的 SqlSession 进行相同的两次查询(需要 sqlSession1 关闭),执行了一次 SQL 语句
在这里插入图片描述

查看日志,结果如图:
在这里插入图片描述

开启二级缓存需要在 MyBatis 全局配置文件中配置 cacheEnabled 值为 true 。同时在映射文件中添加 < cache /> 标签。另外,在 select 标签的 useCache 属性中,默认值为 true ,开启二级缓存后,二级缓存生效;若设置为 false ,即使开启二级缓存后也会在该 select 标签中失效。而在 select 标签的 flushCache 属性中,默认值为 false ,使用所有缓存;若设置为 true ,则禁用所有缓存。但是,在增删改标签的 flushCache 属性中,默认值为 true ,执行增删改操作后刷新所有缓存。

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

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

相关文章

Word插件-好用的插件-批量插入图片-大珩助手

现有100张图片&#xff0c;需要批量插入word中&#xff0c;并在word中以每页6张图片的形式呈现&#xff0c;请问怎样做&#xff1f; 使用word大珩助手&#xff0c;多媒体-插入图片&#xff0c;根据图片的长宽&#xff0c;选择连续图片、一行2个图或一行3个图&#xff0c;可一次…

Network 灰鸽宝典【目录】

目前已有文章 11 篇 Network 灰鸽宝典专栏主要关注服务器的配置&#xff0c;前后端开发环境的配置&#xff0c;编辑器的配置&#xff0c;网络服务的配置&#xff0c;网络命令的应用与配置&#xff0c;windows常见问题的解决等。 文章目录 canvas理论基础canvas高级应用示例canv…

开箱即用的C++决策树简单实现

一个数据结构期末作业&#xff08;有兴趣用的话可以高抬贵手star下⭐~&#xff09;GitHub - mcxiaoxiao/c-Decision-tree: 决策树c简单实现 &#x1f333; c-Decision-tree 附大作业/课设参考文档.doc &#x1f333; c-Decision-tree Introduction &#x1f64c; c-Decision…

Java架构师系统架构提升扩展性

目录 1 导语2 架构扩展性-应用扩展3 架构扩展性-数据扩展4 组织可扩展性5 流程可扩展性6 多快好省-扩展性实现方案7单体应用从数百节点到数万节点的扩展历程8 总结想学习架构师构建流程请跳转:Java架构师系统架构设计 1 导语 理解业务需求,对未来的业务发展有清晰的预见性。…

Spring Boot监听redis过期的key

Redis支持过期监听&#xff0c;可以实现监听过期数据&#xff0c;实现过程如下 1、pom依赖 <!-- Redis--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></depend…

Docker基础概念解析:镜像、容器、仓库

当谈到容器化技术时&#xff0c;Docker往往是第一个被提及的工具。Docker的基础概念涵盖了镜像、容器和仓库&#xff0c;它们是理解和使用Docker的关键要素。在这篇文章中&#xff0c;将深入探讨这些概念&#xff0c;并提供更丰富的示例代码&#xff0c;帮助大家更好地理解和应…

在HarmonyOS上使用ArkUI实现计步器应用

介绍 本篇Codelab使用ArkTS语言实现计步器应用&#xff0c;应用主要包括计步传感器、定位服务和后台任务功能&#xff1a; 通过订阅计步器传感器获取计步器数据&#xff0c;处理后显示。通过订阅位置服务获取位置数据&#xff0c;处理后显示。通过服务开发实现后台任务功能。…

2024年AI云计算专题研究报告:智算带来的变化

今天分享的人工智能系列深度研究报告&#xff1a;《2024年AI云计算专题研究报告&#xff1a;智算带来的变化》。 &#xff08;报告出品方&#xff1a;华泰证券&#xff09; 报告共计&#xff1a;32页 Al 云计算 2024:关注智算带来的新变化 通过对海内外主要云厂商及其产业链…

iPhone 数据恢复:iMyFone D-Back iOS

iMyFone D-Back iOS 最佳 iPhone 数据恢复&#xff0c;最好的 iPhone 数据恢复软件&#xff0c;恢复成功率最高。 直接从iOS设备、iTunes/iCloud/第三方程序备份快速恢复数据。 有选择地恢复已删除的照片、WhatsApp、消息和 18 多种其他数据类型。 仅通过 iCloud 帐户访问即可从…

设计模式——策略模式(Strategy Pattern)

概述 策略模式又叫政策模式&#xff0c;是一种对象行为型模式。它是将定义的算法家族分别封装起来&#xff0c;让它们之间可以互相替换&#xff0c;从而让算法的变化不会影响到使用算法的用户。策略模式的主要目的是将算法的定义与使用分开&#xff0c;也就是将算法的行为和环…

基于大语言模型的复杂任务认知推理算法CogTree

近日&#xff0c;阿里云人工智能平台PAI与华东师范大学张伟教授团队合作在自然语言处理顶级会议EMNLP2023上发表了基于认知理论所衍生的CogTree认知树生成式语言模型。通过两个系统&#xff1a;直觉系统和反思系统来模仿人类产生认知的过程。直觉系统负责产生原始问题的多个分解…

pip install出现no matching distribution found for setuptools>=42.0.0的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…