MyBatis 二级缓存

MyBatis的一级、二级缓存 一级缓存是 MyBatis 内部的缓存,作用范围是SqlSession。每个SqlSession都有自己的一级缓存,当在同一个SqlSession中执行多次查询时,MyBatis 会将查询结果缓存在SqlSession的一级缓存中。若再次执行相同的查询操作,MyBatis 会直接从缓存中获取数据,而不再访问数据库。二级缓存是 MyBatis 提供的全局缓存,作用范围是Mapper 映射文件。它可以跨多个SqlSession存储数据,通常用于多个请求或多个用户之间共享缓存。一级缓存。 阅读详情

    /**
     * 测试二级缓存,
     * 二级缓存默认是关闭的,如果想使用二级缓存需要做如下两边操作:
     * 1.开启二级缓存的总开关(在mybatis的配置文件中设置),这步可以不做,因为默认就开启的
     *  <!-- 
     *      A:开启二级缓存的总开关,由于默认值就是true,所以可以不配
     * 注意:如果同时设置了settings和typeAliases则要求settings必须设置在typeAliases的前面,否则违背了dtd约束报错。
     *  -->
        <settings>
            <setting name="cacheEnabled" value="true"/>
        </settings>

        2.开启指定mapper下的二级缓存(在mybatis的映射文件中设置)
            <!-- B:开启当前mapper下的二级缓存 -->
            <cache/>

     * 
     * 注意点:
     *  A:只有在将第一次查询时使用的sqlSession提交后才会将查找到的对象存入到二级缓存中,否则不会自动存入。
     *  B:如果想将查询到的对象存入到二级缓存中,则必须让当前对象的类实现Serializable接口,否则报异常:
     *      Cause: org.apache.ibatis.cache.CacheException: Error serializing object.  
     *      Cause: java.io.NotSerializableException: com.hsj.domain.Worker
     */
    @Test
    public void testGetWorkerByIdWithSecondCache() {
        int id=1;
        try {
            SqlSession sqlSession1=MyBatisUtils.getSqlSession();
            SqlSession sqlSession2=MyBatisUtils.getSqlSession();

            //1.从数据库中查询信息并存入到一级缓存中
            Worker worker1=sqlSession1.selectOne("com.hsj.dao.WorkerDao.getWorkerByIdWithSecondCache", id);
            System.out.println("worker1="+worker1);
            //2.如果想把查询的对象存入到二级缓存中,则必须调用当前sqlSession的commit()方法,否则不会将查询到的对象写入到二级缓存中
            sqlSession1.commit();
            System.out.println("=================");
            Worker worker2=sqlSession2.selectOne("com.hsj.dao.WorkerDao.getWorkerByIdWithSecondCache", id);
            System.out.println("worker2="+worker2);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hsj.dao.WorkerDao">

    <!-- 
    B:开启当前mapper下的二级缓存
        eviction="FIFO":设置缓存淘汰对象的策略,
            FIFO(First In First Out):按照对象进入缓存的时间顺序决定淘汰顺序
            LRU(Least Recently Used):最近最少使用算法
            LFU(Least Frequence Used):使用频率最少的对象优先从缓存中清除的算法。

        flushInterval="60000":每隔多少毫秒扫描一次缓存对象
        size="512":缓存中最大可以缓存的对象数目
        readOnly="true":缓存对象是只读的

     -->
    <cache
        eviction="FIFO"
        flushInterval="60000"
        size="512"
        readOnly="true"
    />


    ........

</mapper>
SAP CO-PA数据传送避坑指南:销售开票与FI/MM记账的日常配置实操(含KEKF/KE4I/KEI2) 本文深入解析SAP CO-PA数据传送中的常见配置问题,特别是销售开票与FI/MM记账环节的实操避坑指南。通过KEKF/KE4I/KEI2等关键配置点的详细说明,帮助用户避免数据失真和重复记录,提升获利能力分析的准确性。文章结合实战案例,揭示官方文档未提及的'数据黑洞'形成机制,为SAP顾问提供实用的排雷手册。 阅读详情

相关推荐

语义通信实战:跳过“比特”保“语义”,手把手构建轻量级图像压缩重建网络(基于PyTorch)

本文详细介绍了基于PyTorch的轻量级语义通信系统LICRnet的实现,专注于图像压缩重建中的语义信息保留。通过深度可分离卷积、可变窗口多尺度注意力等创新技术,显著降低计算量并提升性能,特别适用于无人机巡检、远程医疗等物联网场景。文章包含完整的代码实现、训练策略及部署优化方案。

weixin_27697385的博客 220

mybatis入门教程(九)------mybatis缓存

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34320159的博客 149

DaVinci Developer中枚举类型变量的创建与实战应用

本文详细介绍了在DaVinci Developer中创建和使用枚举类型变量的方法与实战应用。通过智能温控系统的案例,阐述了枚举类型在嵌入式开发中的核心价值,包括提升代码可读性、类型安全性和维护便捷性。文章还提供了枚举类型在状态机实现和多模块协同中的高级应用技巧,以及调试与优化的实用建议。

ik678901234的博客 511

mybatis的二级缓存使用

我们首先要知道mybatis中的一级缓存是在没有关闭session的时候,执行相同的select时候,二次以后的查询不会发送select语句至数据库,以减少对数据库的联机操作。 二级缓存是建立了2个session以后执行相同的select语句后依然也不会再数据库执行select语句,而内容依然从缓存中读取出来。 我们看一下如果使用mybatis的二级缓存;希望大家可以仔细阅读,里面有一些注意细节,这些细节对于初学者很有帮助。 (1)在mybatis的核心配置文件中开启二级环境配置 <setting

风学长的博客 1万+

10步掌握!跨国企业在MySQL中实现数据主权的秘诀 vs. 传统方法,你选对了吗?

首先,我们要明确“数据主权”这一概念。简单来说,它指的是国家对其境内产生的所有类型的数据拥有绝对控制权。这意味着即使数据被存储在国外服务器上,只要该数据来源于某国,那么该国政府就有权对其进行监管。对于跨国公司来说,这就要求它们必须严格遵循不同国家关于数据保护的规定,如欧盟的GDPR、美国的《云法案》以及中国的《网络安全法》等。

java专栏 714

不提交也不释放的事务,数据库连接还有可能被复用

摘要 实验发现Spring事务管理下,未提交事务的数据库连接池连接仍可被复用,这与传统认知相悖。通过配置HikariCP连接池(最大2连接)并设计测试接口,观察到未提交事务的连接会被后续请求复用。这可能导致GTID错误(当MySQL开启GTID且混用事务/非事务表时)以及数据修改丢失问题。研究揭示了Spring事务管理机制与连接池交互的特殊行为,对高并发系统设计具有重要启示。

蔡定努 173

Mybatis二级缓存

阻塞的情况下,如果一个sqlSession获取指定cacheKey的二级缓存为null时,在其实时查询数据、填充缓存之前,如果有其他sqlSession也尝试获取该cacheKey的二级缓存,则该sqlSession将处于blocking状态,直到上一个sqlSession将缓存填充完毕。开启二级缓存后,并不是所有的查询结果立刻放入二级缓存,而是将其放入暂存区,等执行commit方法后,才会将暂存区的数据put到二级缓存中。属性可以被设置为任意的正整数,设置的值应该是一个以毫秒为单位的合理时间量。

好记性不如烂笔头 2367

SAP Fiori Launchpad 上看不到任何 tile 应该怎么办?

中心UI组件是一个框架,为所有SAPFiori应用程序提供公共基础设施SAPFiorilaunchpad是所有SAPFioriUI的基础,并为SAPFiori应用程序提供基本功能,如登录,界面大小,应用程序之间的导航,和基于角色的应用程序目录。ABAP前端服务器包含所有基础设施组件,用于为客户端生成SAPFiori应用程序特定的UI,并与SAPBusinessSuite后端系统通信。SAPFiori应用程序的处理过程如下首先,客户端加载SAPFiori应用程序的界面。...

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 940

【Mybatis】Mybatis 二级缓存全详解教程

MyBatis-Plus(简称MP)是一个基于 MyBatis 的增强工具,它简化了 MyBatis 的开发,并且提供了许多便利的功能,帮助开发者更高效地进行持久层的开发。

小电玩 5782

ABAP Development Tool for Visual Studio Code 里使用 MCP server

本文讨论了SAP ABAP开发环境中,除GitHub Copilot外,其他可作为MCP客户端接入ABAP开发工具(MCP server)的编码代理(coding agent)。GitHub Copilot是官方确认可用的工具,而其他代理如Claude Code、Cursor、Windsurf Cascade、Cline和Continue虽然理论上支持MCP协议,但要实际用于ABAP开发还需满足两个关键条件:兼容MCP协议,并能处理VS Code虚拟工作区文件系统。这些工具需要单独验证是否支持ABAP开发工

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 254

如何使用Agent框架来模拟群体智能?

Agent 框架作为人工智能领域的重要工具,可以模拟复杂的群体智能行为,广泛应用于社会科学、经济学和行为学等领域。

333

MyBatis 的一级缓存和二级缓存

文章目录一、前言二、一级缓存三、二级缓存3.1、开启二级缓存:四、测试一下五、总结: 一、前言 先说缓存,合理使用缓存是优化中最常见的,将从数据库中查询出来的数据放入缓存中,下次使用时不必从数据库查询,而是直接从缓存中读取,避免频繁操作数据库,减轻数据库的压力,同时提高系统性能。 二、一级缓存 一级缓存 是 SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有...

猎人在吃肉 7776

OSG第三方库编译之二十一:minizip编译(Windows、Linux、Macos环境下编译)

OSG编译;第三方库;跨平台编译;minizip编译(Windows、Linux、Macos环境下编译)

LuckyHanMo的博客 2619

开启mybatis开启二级缓存

Mybatis中有一级缓存和二级缓存,默认情况下一级缓存是开启的,而且是不能关闭的。一级缓存是指SqlSession级别的缓存,当在同一个SqlSession中进行相同的SQL语句查询时,第二次以后的查询不会从数据库查询,而是直接从缓存中获取,一级缓存最多缓存1024条SQL。二级缓存是指可以跨SqlSession的缓存,是mapper级别的缓存,对于mapper级别的缓存不同的sqlsession是可以共享的,mapper以命名空间为单位创建缓存数据结构,需要手动开启。 一、开启二级缓存 和一级缓存默认开

thunder-1 5837

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

mybatis 二级缓存

二级缓存是 MyBatis 提供的一种缓存机制,用于减少对数据库的访问次数,提高应用程序的性能。它是基于 SQLSessionFactory 级别的缓存,与一级缓存(SQLSession 级别的缓存)不同,二级缓存在多个 SQLSession 之间共享。以下是二级缓存的一些关键点:形象解释一下:二级缓存可以形象地比喻成一个共享的图书馆,用来提高数据查询的效率。

KNeeg_的博客 1461

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

浅谈MyBatis二级缓存

一、二级缓存介绍 我们知道MyBatis 提供了一级缓存来减轻数据库的压力,但是一级缓存是一个SqlSession(会话)级别的缓存,这也就意味着一级缓存的适用范围比较小。在一级缓存的基础上,MyBatis 提供了二级缓存机制,二级缓存是一个namespace级别的缓存,相对于一级缓存而言,二级缓存允许跨SqlSession工作,因此二级缓存的作用范围更大。 有关一级缓存可参考博文: htt...

点滴记录 5516

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

mybatis二级缓存架构原理

一级缓存 与springboot集成时一级缓存不生效原因以及解决方案 如何解决这个问题? 要知道如何解决这个问题, 二级缓存 为什么mybatis默认不开启二级缓存? 不推荐使用。 ...

修理男爵的博客 3857

MyBatis源码剖析之二级缓存细节

MyBatis是一个流行的Java持久化框架,它提供了许多功能,包括支持一级缓存和二级缓存。一级缓存是默认开启的,它是在SqlSession层面的缓存。在同一个SqlSession中,如果执行了相同的SQL语句,那么第二次执行将从缓存中获取结果,而不是再次查询数据库。一级缓存是SqlSession级别的,当SqlSession被关闭时,缓存也将被清空。二级缓存是在Mapper级别的缓存,它可以跨越多个SqlSession。

write less , do more 3646

Mybatis二级缓存详解

Mybatis二级缓存详解

汤键的博客 3002

mybatis的一级、二级缓存

mybatis的一级缓存和二级缓存 mybatis 的一级缓存:sqlsession 级别的,内部维护的其实就是Map,其缓存对象是PerpetualCache。 1、MyBatis的一级缓存是SqlSession级别的,但是它并不定义在SqlSessio接口的实现类DefaultSqlSession中,而是定义在DefaultSqlSession的成员变量Executor中,Exe...

cuichunchi的博客 6826

mybatis中一级缓存和二级缓存

1.一级缓存 一级缓存是SqlSession级别的缓存。在操作数据库时需要构造 sqlSession对象,在对象中有一个(内存区域)数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。 Mybatis默认开启一级缓存。 一级缓存的作用域是同一个SqlSession,在同一个sqlSession中两次执行相同的sql语句,第一次执...

流的博客 2万+

MyBatis之二级缓存

文章目录Mybatis的二级缓存二级缓存运行规则二级缓存字段详细解释 Mybatis的二级缓存 一级缓存默认开启,缓存范围SqlSession会话 耳机缓存手动开启,属于范围Mapper Namespace 二级缓存运行规则 1.二级开启后,默认所有查询操作均使用缓存 2.写操作commit提交时,对该namespace缓存强制清空,这么做是为了保证数据的一致性。 3. 配置useCache=false可以不用缓存 4. 配置flushCache=true代表强制清空缓存 一级缓存测试 @Test

mercies的博客 910

mybatis 二级缓存失效_Mybatis二级缓存

1.缓存介绍Mybatis提供查询缓存,如果缓存中有数据就不用从数据库中获取,用于减轻数据压力,提高系统性能。Mybatis的查询缓存总共有两级,我们称之为一级缓存和二级缓存,如图:一级缓存是SqlSession级别的缓存。在操作数据库时需要构造 sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相...

weixin_30095869的博客 941

Mybatis缓存之二级缓存详解

Mybatis二级缓存 二级缓存也叫全局缓存,一级缓存作用域太低了,所以诞生了二级缓存 基于namespace级别的缓存,一个名称空间,对应一个二级缓存; 工作机制 一个会话查询一条数据,这个数据就会被放在当前会话的一级缓存中; 如果当前会话关闭了,这个会话对应的一级缓存就没了;但是我们想要的是,会话关闭了,一级缓存中的数据被保存到二级缓存中 新的会话查询信息,就可以从二级缓存中获取内容; 不同的mapper查出的数据会放在自己对应的缓存(map)中; 二级缓存的使用步骤 开启全局缓存

qq_41359998的博客 3592

Mybatis缓存——二级缓存

Mybatis缓存——二级缓存概述示例配置二级缓存使用二级缓存二级缓存整合redis源码二级缓存标签配置文件 cacheEnabledMpper.xml :cache标签查询 概述 二级缓存的原理和一级缓存一样,同样是第一次查询会从数据库中查询,然后放入到缓存中,第二次就从缓存中获取数据。区别是一级缓存是基于sqlSession的,二级缓存是基于同一个Mapper的namespace的,也就是说如果两个不同的mapper,但是namepace相同,那么这两个mapper查询出来的数据,也会存放到同一个二级缓

HaiYun 999

Mybatis的二级缓存

但行好事,莫问前程 二级缓存   Mybatis的二级缓存是指mapper映射文件。二级缓存的作用域是同一个namespace下的mapper映射文件内容,多个SqlSession共享。Mybatis需要手动设置启动二级缓存。   二级缓存是默认启用的(要生效需要对每个Mapper进行配置),如想取消,则可以通过Mybatis配置文件中的元素下的子元素来指定cacheEnabled为false。 ...

qq_43097201的博客 346
上一篇: Mybatis 动态sql
下一篇: MyBatis many to one 注解
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值