Mybatis框架的缓存

Mybatis框架的缓存

一.为什么使用缓存

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

二.缓存类型

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 提交后会清空缓存区 域,防止脏读。

二级缓存工作模式:
在这里插入图片描述

配置二级缓存配置:

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

Mybatis:

    <settings><setting name="cacheEnabled" value="true"/></settings>

Mapper:

        <!--设置二级缓存配置的size=""缓存对象数量flushInterval=""设置二级缓存有效时间   毫秒单位eviction="FIFO"  firstinfirstout先入先出 配置到期后淘汰策略--><cache size="20" flushInterval="3000"></cache>

四.Mybatis架构:
在这里插入图片描述

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

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

相关文章

windows-docker-本地部署-前端

前置条件 docker已有需要打包的文件也已经写好了 打包镜像 ip地址修改 需要根据自身修改的文件 .env.local文件存放你前端访问的端口 172.24.240.1:这部分是自己电脑的ip 如何查看本机ip&#xff0c;使用IPV4的地址。 #本地 #API_HOST_URLhttp://172.24.240.1:8091打包文…

Ubuntu下 Tailscale的安装配置与优化

今天&#xff0c;我在阿贝云的免费云服务器上进行了Tailscale的部署测试。说实话&#xff0c;这家免费云服务器真的不错,配置也算不错(1核CPU、1G内存、10G硬盘、5M带宽)。作为一个完全免费的云服务器,已经满足了我的大部分需求了,真的很感谢阿贝云提供这样一个优质的免费服务!…

Excel导出实例

在上一节的基础上&#xff0c;本文演示下如何导出excel数据。 Excel导出操作演示 继承ocean-easyexcel SDK <dependency><groupId>com.angel.ocean</groupId><artifactId>ocean-easyexcel</artifactId><version>1.0.0</version> …

架构设计 - 网站性能优化之静态资源CDN配置

摘要: web 应用业务缓存通常3级: 一级缓存:JVM 本地缓存 二级缓存:Redis集中式缓存 三级缓存:Nginx Proxy Cache 缓存 或 Nginx Lua 缓存 四级缓存:静态资源CDN缓存 页面静态化 本文主要分享 怎样通过CDN缓存静态资源的方式 提高系统性能和响应速度。 WEB应用通过CD…

【机器学习】正则卷积群理论及Python代码实现

1. 引言 1.1.卷积神经网络CNN 卷积神经网络&#xff08;CNN&#xff09;的数学模型是深度学习中用于处理图像和其他高维数据的关键组成部分。那么&#xff0c;CNN究竟是什么呢&#xff1f; 总结起来&#xff0c;CNN网络主要完成以下操作&#xff1a; 卷积操作&#xff08;Co…

【专业英语 复习】第11章 Databases

1. In the ____ database, data elements are stored in different tables, each of which consists of rows and columns. A. network B. hierarchical C. relational D. object-oriented 正确答案&#xff1a;C 在关系数据库中&#xff0c;数据元素存储在不同的表中&#xff…

无线麦克风一拖二哪个牌子好,揭秘目前音质最好的麦克风

在自媒体的世界里&#xff0c;无线领夹麦克风已经成了一种标准配置&#xff0c;它受到广大视频创作者的青睐。无论是刚刚踏入短视频领域的新手&#xff0c;还是已经拥有丰富经验的资深博主&#xff0c;都深知一款好的领夹麦克风对于提升视频音频质量的重要性。它不仅能帮助创作…

帆软FCA-FineReport入门考试

Part.1&#xff1a;判断题 &#xff08;总分&#xff1a;56分 得分&#xff1a;42&#xff09; 第1题 判断题 进行决策系统平台目录管理时&#xff0c;链接的地址可以选择使用相对路径或绝对路径(得分&#xff1a;2分 满分&#xff1a;2分) 正确答案&#xff1a;A 你的答案&am…

SQLCMD完全指南:掌控 SQL Server

SQL Server 拥有被广泛认可的一流管理工具——SQL Server Management Studio&#xff08;简称 SSMS&#xff09;。它提供了丰富的功能&#xff0c;极大地简化了开发人员和数据库管理员&#xff08;DBA&#xff09;的工作。 目录 SQLCMD 入门使用 SQLCMD 连接 SQL ServerSQLCMD …

Java和C语言中基础概念中的区别有哪些?

Java和C语言中基础概念中的区别有哪些&#xff1f; 标识符数据类型运算符加号%号& 和 | 关系表达式函数声明代码规范数组 以下是Java和C语言在一些基础概念中的区别&#xff08;不包含面向对象等的高级知识&#xff09; 标识符 在Java中&#xff0c;标识符可以由数字、字母…

【Java】字节数组 pcm 与 wav 格式互转(附原理概述)

前言 最近实现了一个文字转语音的功能&#xff0c;语音引擎返回的是pcm格式的数据。需要转化成wav格式前端才能播放。本文首先会给出解决方案&#xff0c;后续会讲背后的原理。 场景 1. pcm wav 转化工具类 入参和出参都为byte[]&#xff0c;理论上有了 byte[] 就可以输出…

基于单片机的智能窗户控制系统的设计

摘 要&#xff1a; 根据单片机技术和现代传感器技术 &#xff0c; 本文主要针对基于单片机的智能窗户控制系统的设计进行探讨 &#xff0c; 仅供参考 。 关键词&#xff1a; 单片机 &#xff1b; 智能窗户 &#xff1b; 控制系统 &#xff1b; 设计 在现代科学技术持续发展的带…

面完小红书算法岗,心态崩了。。。

暑期实习基本结束了&#xff0c;校招即将开启。 不同以往的是&#xff0c;当前职场环境已不再是那个双向奔赴时代了。求职者在变多&#xff0c;HC 在变少&#xff0c;岗位要求还更高了。提前准备才是完全之策。 最近&#xff0c;我们又陆续整理了很多大厂的面试题&#xff0c…

Python爬虫基础以及示例讲解

爬虫简介 网络爬虫 爬虫指在使用程序模拟浏览器向服务端发出网络请求&#xff0c;以便获取服务端返回的内容。 但这些内容可能涉及到一些机密信息&#xff0c;所以爬虫领域目前来讲是属于灰色领域&#xff0c;切勿违法犯罪。 爬虫本身作为一门技术没有任何问题&#xff0c;关…

Docker之overlay2的迁移

原因 docker默认将文件及其容器放置在了系统盘的挂载区内&#xff0c;如果长期使用会发现系统挂载区被overlay2挤爆了,因此在一开始我们将其迁移在大容量外挂磁盘上,就可以避免系统盘被挤爆,放心使用. 具体操作 # 停止容器 systemctl stop docker# 修改容器配置&#xff0c…

等差数列和等比数列的介绍及在Java编程中的实现

等差数列 (Arithmetic Sequence) 定义&#xff1a;等差数列是指相邻两项的差相等的数列&#xff0c;这个差值叫做“公差”&#xff08;d&#xff09;。 公式&#xff1a; 第 ( n ) 项的公式&#xff1a; 前 ( n ) 项和的公式&#xff1a; 示例&#xff1a; 假设第一项 (…

AI+前端技术的结合(实现图片识别功能)

随着人工智能技术的不断发展&#xff0c;AI在前端设计页面中的应用变得越来越普遍。比如&#xff1a;在电商平台上&#xff0c;可以利用对象检测技术实现商品的自动识别和分类&#xff1b;人脸识别&#xff1b;车辆检测&#xff1b;图片识别等等......其中一个显著的应用是在图…

数据结构_优先级队列(堆)

目录 一、优先级队列 1.1 堆 1.2 PriorityQueue接口 二、模拟实现优先级队列 2.1 初始化 2.2 创建大根堆 (向下调整) 2.3 堆的插入 2.4 堆的删除 2.5 堆排序 总结 一、优先级队列 优先级队列是一种特殊的队列&#xff0c;其出队顺序与入队顺序无关&#xff0c;而与优…

易支付宝塔一键部署项目 懒人专用包 制作

宝塔一键部署说明 https://www.bt.cn/bbs/thread-33063-1-1.html 1. auto_install.json {"php_ext":"fileinfo","chmod":[],"success_url":"install/?step3&jump1","php_versions":"80","db…

利用机器学习弄懂机器学习!

第一个问题&#xff1a;什么是机器学习&#xff1f; 机器学习是人工智能的一个子领域&#xff0c;它使计算机系统能够从经验中学习并改进其性能&#xff08;和人一样&#xff0c;人也是从经验当中&#xff0c;实现自己的不断地学习和提升&#xff09;。简单来说&#xff0c;机…