MyBatis的缓存

news2024/10/6 4:02:08

目录

1.一级缓存

情况一 : 不同的SqlSession对应不同的一级缓存

情况二 :  同一个SqlSession但是查询条件不同

情况三 : 同一个SqlSession两次查询期间执行了任何一次增删改操作

情况四 : 同一个SqlSession两次查询期间手动清空了缓存

2.二级缓存

2.1二级缓存的相关配置

3.MyBatis缓存查询顺序

4.整合第三方缓存EHCache

1.添加依赖

2.各jar包功能

3.创建EHCache配置文件ehcache.xml

4.设置二级缓存类型

5.加入logback日志

6.EHCache配置说明


1.一级缓存

一级缓存是 Sqlsession 级别的 , 需要使用同一个Sqlsession ,经过Sqlsession查询出来的数据,如果下次查询了相同的数据,那么就会在缓存里面查找数据,不需要重新查询。

使一级缓存失效的四种情况:

  •  不同的SqlSession对应不同的一级缓存
  •  同一个SqlSession但是查询条件不同
  •  同一个SqlSession两次查询期间执行了任何一次增删改操作
  •  同一个SqlSession两次查询期间手动清空了缓存

情况一 : 不同的SqlSession对应不同的一级缓存

情况二 :  同一个SqlSession但是查询条件不同

情况三 : 同一个SqlSession两次查询期间执行了任何一次增删改操作

情况四 : 同一个SqlSession两次查询期间手动清空了缓存

2.二级缓存

       MyBatis的二级缓存是SqlSessionFactory级别的 , 即通过同一个SqlSession所获得的SqlSession对象查询的数据会被缓存 , 在通过同一个SqlSessionFactory所获取的SqlSession查询相同的数据会从缓存中获取 .

MyBatis二级缓存开启的条件 :

  • 在核心配置文件中,设置全局配置属性cacheEnabled="true",默认为true,不需要设置
  • 在映射文件中设置标签 <cache/>
  • 二级缓存必须在SqlSession关闭或提交之后有效
  • 查询的数据所转换的实体类类型必须实现序列化的接口

 

使二级缓存失效的情况 : 两次查询之间执行了任意的增删改,会使一级和二级缓存同时失效

在映射文件中设置标签 <cache/>

查询的数据所转换的实体类类型必须实现序列化的接口

2.1二级缓存的相关配置

在mapper配置文件中添加的cache标签可以设置一些属性:

        ①eviction属性:缓存回收策略,默认的是 LRU。

        LRU(Least Recently Used) – 最近最少使用的:移除最长时间不被使用的对象。

        FIFO(First in First out) – 先进先出:按对象进入缓存的顺序来移除它们。

        SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。

        WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。

 

②flushInterval属性:刷新间隔,单位毫秒 默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句时刷新

 

③size属性:引用数目,正整数 代表缓存最多可以存储多少个对象,太大容易导致内存溢出

 

④readOnly属性:只读, true/false true:只读缓存;会给所有调用者返回缓存对象的相同实例。因此这些对象不能被修改。这提供了 很重 要的性能优势。

false:读写缓存;会返回缓存对象的拷贝(通过序列化)。这会慢一些,但是安全,因此默认是 false。

3.MyBatis缓存查询顺序

先查询二级缓存,因为二级缓存中可能会有其他程序已经查出来的数据,可以拿来直接使用。

         如果二级缓存没有命中,再查询一级缓存

         如果一级缓存也没有命中,则查询数据库

         SqlSession关闭之后,一级缓存中的数据会写入二级缓存

4.整合第三方缓存EHCache

1.添加依赖

<!--MybatisEHCache整合包-->
<dependency>
    <groupId>org.mybatis.caches</groupId>
    <artifactId>mybatis-ehcache</artifactId>
    <version>1.2.2</version>
</dependency>


<!--slf4j日志门面的一个具体实现-->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-examples</artifactId>
    <version>1.2.3</version>
</dependency>

 

2.jar包功能

 

3.创建EHCache配置文件ehcache.xml

<?xmlversion="1.0"encoding="utf-8"?>

<ehcachexmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">

<!--磁盘保存路径-->
<diskStorepath="D:\atguigu\ehcache"/>
<defaultCache>

    maxElementsInMemory="1000"

    maxElementsOnDisk="10000000"

    eternal="false"

    overflowToDisk="true"

    timeToIdleSeconds="120"

    timeToLiveSeconds="120"

    diskExpiryThreadIntervalSeconds="120"

    memoryStoreEvictionPolicy="LRU">

</defaultCache>

</ehcache>

4.设置二级缓存类型

<!--设置二级缓存的类型-->

<cachetype="org.mybatis.caches.ehcache.EhcacheCache"/>

5.加入logback日志

存在SLF4J时,作为简易日志的log4j将失效,此时我们需要借助SLF4J的具体实现logback来打印日 志。 创建logback的配置文件logback.xml

<?xmlversion="1.0"encoding="UTF-8"?>
<configurationdebug="true">
<!--指定日志输出的位置-->
<appendername="STDOUT"class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <!--日志输出的格式-->
        <!--按照顺序分别是:时间、日志级别、线程名称、打印日志的类、日志主体内容、换行-->
        <pattern>[%d{HH:mm:ss.SSS}][%-5level][%thread][%logger][%msg]%n</pattern>
    </encoder>
</appender>

<!--设置全局日志级别。日志级别按顺序分别是:DEBUG、INFO、WARN、ERROR-->
<!--指定任何一个日志级别都只打印当前级别和后面级别的日志。-->
<rootlevel="DEBUG">
    <!--指定打印日志的appender,这里通过“STDOUT”引用了前面配置的appender-->
    <appender-refref="STDOUT"/>
</root>

<!--根据特殊需求指定局部日志级别-->
<loggername="com.atguigu.crowd.mapper"level="DEBUG"/>
</configuration>

6.EHCache配置说明

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

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

相关文章

内网渗透神器CobaltStrike之会话管理(五)

CS之间派生会话 将CS1管理的会话派生至CS2中, 简单来说就是将CS1服务器的肉鸡送给CS2服务器 准备环境 主机描述Kali(192.168.47.134)CS TeamServer1Kali2(192.168.47.144)CS TeamServer2Windows7(192.168.47.133)CS客户端,攻击机Windows7(192.168.47.141)受害机操作步骤 首先…

详解:MySQL自增ID与UUID的优缺点及选择建议,MySQL有序uuid与自定义函数实现

文章目录1.自增ID的优缺点1.1 优点1.2 缺点1.3 不适合以自增ID主键作为主键的情况2.UUID作为主键2.1 介绍2.2 优点2.3 缺点3.有序UUID作为主键3.1 介绍3.2 演示使用3.2.1 前提知识3.2.1.1 数据类型 - binary3.2.1.2 函数 - hex()3.2.1.3 函数 - unhex()3.2.2 数据库层3.2.3 JAV…

web自动化测试(java+seleium)环境安装

目录0、应用1、linux安装1.1 安装chromium1.2 安装chromedriver1.3 安装xvfb2、java maven依赖selenium依赖3、入门案例0、应用 前一段时间&#xff0c;需要实现一个模拟页面操作的功能&#xff0c;去检测程序运行是否稳定&#xff0c;因此就用到了web自动化检测的功能。 1、实…

Centos8安装部署JumpServer堡垒机

1&#xff1a;安装支持在线安装和离线安装&#xff0c;我们选择在线安装一键部署。安装需要的环境要求。 OS/ArchArchitectureLinux KernelSoft Requirementlinux/amd64x86_64> 4.0wget curl tar gettext iptables pythonlinux/arm64aarch64> 4.0wget curl tar gettext …

highcharts 堆积图

参考 多坐标轴混合图 | JShare 使用 js资源 https://cdn.highcharts.com.cn/10.2.1/highcharts.js https://cdn.highcharts.com.cn/10.2.1/modules/exporting.js https://img.hcharts.cn/highcharts-plugins/highcharts-zh_CN.js 效果 js 引用 <script src"https…

【网页设计】期末大作业html+css(体育网站)--杜丹特篮球介绍8页 带报告

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 校园篮球网页设计 | 足球体育运动 | 体育游泳运动 | 兵乓球 | 网球 | 等网站的设计与制作 | HTML期末大学生网页设计作业 HTML&#xff1a;结构 CSS&…

代码随想录刷题|LeetCode 343. 整数拆分 96.不同的二叉搜索树

目录 343. 整数拆分 思路 整数拆分 96.不同的二叉搜索树 思路 不同的二叉搜索树 343. 整数拆分 题目链接&#xff1a;力扣 思路 动态规划的题目虽然说是要先确定dp数组的含义&#xff0c;再确定递归公式&#xff0c;但是总感觉这两者是相辅相成的&#xff0c;是一起出来的&…

[附源码]java毕业设计校园飞毛腿系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【三维点云】2-三维点云表征

文章目录内容概要1 三维数据的获取方式及原理1.1 被动测量单目立体视觉双目立体视觉多目立体视觉1.2 主动测量结构光3D成像TOF 3D成像脉冲法相位法2 三维数据的获取原理立体视觉测量法相机成像模型小孔成像模型&#xff08;相机成像模型的理想情况&#xff09;单目立体视觉聚焦…

[附源码]计算机毕业设计JAVA基于web的球类体育馆预定系统

[附源码]计算机毕业设计JAVA基于web的球类体育馆预定系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; …

SPARKSQL3.0-SessionState构建源码剖析

一、介绍 Apache Spark 2.0引入了SparkSession&#xff0c;其目的是为用户提供了一个统一的切入点来使用Spark的各项功能&#xff0c;不再需要显式地创建SparkConf, SparkContext 以及 SQLContext&#xff0c;因为这些对象已经封装在SparkSession中。此外SparkSession允许用户…

字节跳动提出KVM内核热升级方案,效率提升5.25倍!

背景 作为云计算最重要的底层基础之一&#xff0c;KVM 虚拟化软件在现代的数据中心中应用非常广泛。基于 KVM 的 hypervisor 包括了构成宿主机的软硬件&#xff0c;共同为虚拟机中的应用程序提供高性能的 CPU、内存和 IO 设备等资源。在大规模部署的生产环境中&#xff0c;作为…

周年更名,元宇宙产业委再上新台阶

今天&#xff0c;2022年11月10日&#xff0c;全球元宇宙大会在鹏城隆重举行&#xff0c;这个日子也是中国移动通信联合会元宇宙产业工作委员会成立一周年的日子。会上&#xff0c;我们宣布了这个更名消息&#xff0c;这也是元宇宙产业工作委员会迈上一个新台阶的标志。有20多家…

ES学习笔记

01:REST 指的是客户端和服务器之间的交互在请求之间是无状态的,从客户端到服务器的每个请求都必须包含理解请求所必须的信息,同时在请求之间的任意间隔时间点,若服务器重启,那么客户端是得不到相应的通知的.所以无状态的请求可以由任何可用的服务器回答. 在REST样式的Web服务中…

LeetCode 42.接雨水

这篇记录一下刷接雨水这道题的过程&#xff0c;日后回顾 目录 法1&#xff1a; 法2&#xff1a; 法3&#xff1a; 法4&#xff1a; 法5&#xff1a; 务必掌握123 写这道题要知道雨水怎么算。核心就是要算当前列雨水的高度就要取决于这列左右两侧比自己搞得柱子中较矮的那…

【26-业务开发-基础业务-品牌管理-图片管理-上传图片功能实现-基于阿里云OSS服务-解决跨域问题-设置跨域规则-修改ACL权限为公共读】

一.知识回顾 【0.三高商城系统的专题专栏都帮你整理好了&#xff0c;请点击这里&#xff01;】 【1-系统架构演进过程】 【2-微服务系统架构需求】 【3-高性能、高并发、高可用的三高商城系统项目介绍】 【4-Linux云服务器上安装Docker】 【5-Docker安装部署MySQL和Redis服务】…

springmvc源码之Web上下文初始化

系列文章目录 springmvc源码之Web上下文初始化 文章目录系列文章目录Web上下文初始化ContextLoaderListenerinitWebApplicationContext初始化创建WebApplicationContext上下文Web上下文初始化 web上下文与SerlvetContext的生命周期应该是相同的&#xff0c;springmvc中的web上…

公众号免费查题

公众号免费查题 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 题库&#xff1a;题库后台&#xff08;点击跳转&#xff09; 题…

Flink概念及应用场景

1、Flink实时应用场景 Flink在实时计算领域内的主要应用场景主要分为四类&#xff1a; 实时数据同步流式ETL实时数据分析复杂事件处理2、实时数据体系架构 实时数据体现大致分为三类场景&#xff1a; 流量类业务类特征类在数据模型上&#xff0c;流量类是扁平化的宽表&…

论文管理系统(用户列表显示功能)

上次我们已经实现了论文管理系登录功能,这次我们要实现登录之后的跳转到首页,并且让首页列表显示出数据库的信息并在Mapper中写入模糊查询功能语句,这次我们不使用MybatisPlus写这个功能,这次使用Mybatis来写,区别就是Plus是继承于<BaseDAO>Mapper,而Mybatis则是我们通过…