浅谈Mybatis的一级缓存和二级缓存

Spring整合MyBatis后一级缓存的使用 Mybatis的一级缓存是sqlSession级别的,在不进行Insert,Update操作的情况下,使用同一sqlsession下的多次相同查询会使用缓存结果。 Spring整个MyBatis后与Mybatis单独使用有所区别 Spring整合Mybatis后,通过SqlSessionTemplate创建sqlSession代理对象,默认每次查询都是创建新的sqlSession对象,查询执行结束后在finally中关闭代理sqlSession。 Spring整合Mybatis中,默认情况下一级缓存 阅读详情

MyBatis的缓存机制

缓存的引入

当我们大量执行重复的查询SQL语句的时候,会频繁的和数据库进行通信,会增加查询时间等影响用户体验的问题,可以通过缓存,以降低网络流量,使网站加载速度更快.

MyBatis的一级缓存

默认情况下,MyBatis只启用了本地的会话缓存,它仅仅对一个会话中的数据进行缓存。这也就是大家常说的MyBatis一级缓存,一级缓存的作用域是SqlSession。

第1种情况:同个session进行两次相同查询

代码验证

    //测试一级缓存
    @Test
    public void testCache() throws IOException {
        //加载配置文件
        InputStream rs = Resources.getResourceAsStream("MyBatisConfig.xml");
        //获取工厂建造类
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //获取工厂对象
        SqlSessionFactory build = sqlSessionFactoryBuilder.build(rs);
        //获取SqlSession对象
        SqlSession sqlSession = build.openSession(true);
        //得到代理的对象
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        //根据名字查询
        Student stu1 = mapper.findStudentByName("小花花");
        Student stu2 = mapper.findStudentByName("小花花");
        /*
        这里相等,说明默认开启一级缓存,就是在同一个sqlSession域中有效,只要查询相同的语句,就是从一级缓存中获取
         */
        System.out.println("两次查询结果的学生对象是否是同一个:"+(stu1==stu2));
        //关闭会话
        sqlSession.close();
        rs.close();
    }

执行结果
在这里插入图片描述
在这里插入图片描述
由上面的执行结果得知
MyBatis是默认开启一级缓存的,作用域是同一个SqlSession,在同一个sqlSession中查询相同的sql语句,第一次查询后会将结果对象存放在一级缓存中,在后面查询相同的sql语句的时候会在一级缓存中去获取,不用在与数据库进行通信,大大降低了查询速度.

第2种情况:同个session进行两次不同的查询。

** 代码演示**

//测试一级缓存
    @Test
    public void testCache() throws IOException {
        //加载配置文件
        InputStream rs = Resources.getResourceAsStream("MyBatisConfig.xml");
        //获取工厂建造类
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //获取工厂对象
        SqlSessionFactory build = sqlSessionFactoryBuilder.build(rs);
        //获取SqlSession对象
        SqlSession sqlSession = build.openSession(true);
        //得到代理的对象
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        //根据名字查询
        Student stu1 = mapper.findStudentByName("小花花");
        Student stu2 = mapper.findStudentByName("小付");

        System.out.println("两次查询结果的学生对象是否是同一个:"+(stu1==stu2));
        //关闭会话
        sqlSession.close();
        rs.close();
    }

控制台输出
在这里插入图片描述

第3种情况:不同session,进行相同查询。

** 代码演示**

    //测试一级缓存
    @Test
    public void testCache() throws IOException {
        //加载配置文件
        InputStream rs = Resources.getResourceAsStream("MyBatisConfig.xml");
        //获取工厂建造类
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //获取工厂对象
        SqlSessionFactory build = sqlSessionFactoryBuilder.build(rs);
        //获取SqlSession对象
        SqlSession sqlSession = build.openSession(true);
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);

        //获取SqlSession2对象
        SqlSession sqlSession2 = build.openSession(true);
        StudentMapper mapper2 = sqlSession2.getMapper(StudentMapper.class);
        //根据名字查询
        Student stu1 = mapper.findStudentByName("小花花");
        Student stu2 = mapper2.findStudentByName("小花花");

        System.out.println("两次查询结果的学生对象是否是同一个:"+(stu1==stu2));
        //关闭会话
        sqlSession.close();
        rs.close();
    }

控制台输出
在这里插入图片描述

第4种情况:同个session,查询之后更新数据,再次查询相同的语句。

代码演示

    //测试一级缓存
    @Test
    public void testCache() throws IOException {
        //加载配置文件
        InputStream rs = Resources.getResourceAsStream("MyBatisConfig.xml");
        //获取工厂建造类
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //获取工厂对象
        SqlSessionFactory build = sqlSessionFactoryBuilder.build(rs);
        //获取SqlSession对象
        SqlSession sqlSession = build.openSession(true);
        //得到代理的对象
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        //根据名字查询
        Student stu1 = mapper.findStudentByName("小花花");
        //修改数据
        stu1.setAge(18);
        //执行更新语句
        mapper.updateStudent(stu1);
        //再次查询
        Student stu2 = mapper.findStudentByName("小花花");
        System.out.println("两次查询结果的学生对象是否是同一个:"+(stu1==stu2));
        //关闭会话
        sqlSession.close();
        rs.close();
    }

控制台输出
在这里插入图片描述

一级缓存结论

MyBatis一级缓存的运行过程是这样的:执行SQL语句的过程中,首次执行它时从数据库获取的所有数据会被存储在一段高速缓存中,今后执行这条语句时就会从高速缓存中读取结果,而不是再次查询数据库。MyBatis提供了默认下基于Java HashMap的缓存实现。

重点是要明白:MyBatis执行SQL语句之后,这条语句的执行结果被缓存,以后再执行这条语句的时候,会直接从缓存中拿结果,而不是再次执行SQL。但是一旦执行新增或更新或删除操作,缓存就会被清除。下面将分情况来验证一下。

很明显,以上各种情况验证了一级缓存的概念,在同个SqlSession中,查询语句相同的sql会被缓存,但是一旦执行新增或更新或删除操作,缓存就会被清除。

MyBatis的二级缓存(全局缓存)

引入

MyBatis 一级缓存最大的共享范围就是一个SqlSession内部,那么如果多个 SqlSession 需要共享缓存,则需要开启二级缓存.

当二级缓存开启后,同一个命名空间(namespace) 所有的操作语句,都影响着一个共同的 cache,也就是二级缓存被多个 SqlSession 共享,是一个全局的变量。当开启缓存后,数据的查询执行的流程就是 二级缓存 -> 一级缓存 -> 数据库。

二级缓存开启条件
二级缓存默认是不开启的,需要手动开启二级缓存,实现二级缓存的时候,MyBatis要求返回的**POJO必须是可序列化的**。开启二级缓存的条件也是比较简单.

在MyBatis核心配置文件中配置开启二级缓存

<!-- 通知 MyBatis 框架开启二级缓存 -->
<settings>
  <setting name="cacheEnabled" value="true"/>
</settings>

在mapper配置文件中开启当前命名空间的查询结果存放在二级缓存中

    <!-- 表示DEPT表查询结果保存到二级缓存(共享缓存)

    cache 标签有多个属性,一起来看一些这些属性分别代表什么意义

    eviction: 缓存回收策略,有这几种回收策略
    LRU - 最近最少回收,移除最长时间不被使用的对象
    FIFO - 先进先出,按照缓存进入的顺序来移除它们
    SOFT - 软引用,移除基于垃圾回收器状态和软引用规则的对象
    WEAK - 弱引用,更积极的移除基于垃圾收集器和弱引用规则的对象

    默认是 LRU 最近最少回收策略
    flushinterval 缓存刷新间隔,缓存多长时间刷新一次,默认不清空,设置一个毫秒值
    readOnly: 是否只读;true 只读,MyBatis 认为所有从缓存中获取数据的操作都是只读操作,不会修改数据。MyBatis 为了加快获取数据,直接就会将数据在缓存中的引用交给用户。不安全,速度快。读写(默认):MyBatis 觉得数据可能会被修改
    size : 缓存存放多少个元素
    type: 指定自定义缓存的全类名(实现Cache 接口即可)
    blocking: 若缓存中找不到对应的key,是否会一直blocking,直到有对应的数据进入缓存。
    我这里就使用默认的,不去设置参数
     -->
    <cache
    eviction="FIFO"
    flushInterval="60000"
    size="512"
    readOnly="true"
    />
  • 实体类对象要Serializable序列化
@Data //这个注解是lombok包下的,可以自动帮我们添加getset方法等
public class Student implements Serializable {
    private Integer sid;
    private String name;
    private Integer age;
}

代码验证

    //测试一级缓存
    @Test
    public void testCache() throws IOException {
        //加载配置文件
        InputStream rs = Resources.getResourceAsStream("MyBatisConfig.xml");
        //获取工厂建造类
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //获取工厂对象
        SqlSessionFactory build = sqlSessionFactoryBuilder.build(rs);
        //获取SqlSession对象
        SqlSession sqlSession = build.openSession(true);
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        //根据名字查询
        Student stu1 = mapper.findStudentByName("小花花");
        System.out.println("第一次查出的对象"+stu1);
        //关闭会话后,会将一级缓存的数据保存在二级缓存中
        sqlSession.close();

        //获取SqlSession2对象
        SqlSession sqlSession2 = build.openSession(true);
        StudentMapper mapper2 = sqlSession2.getMapper(StudentMapper.class);
        //新的会话查询就会从二级缓存中获取数据
        Student stu2 = mapper2.findStudentByName("小花花");
        System.out.println("第二次查出的对象"+stu1);

        System.out.println("两次查询结果的学生对象是否是同一个:"+(stu1==stu2));
        //关闭会话
        sqlSession2.close();
        rs.close();
    }

控制台输出
在这里插入图片描述

图解查询语句执行流程
在这里插入图片描述

 

大多数时候,不是我们不努力,而是不知从何下手,我深知一份好的学习资料是多么的重要,我们通常会把大量的时间都浪费在找资源上。有时候就算有了视频资源,但是没有一个清晰的学习路线,我们依旧 会事倍功半,

海量资源,不用到处找,V薪关注【八戒程序猿】就够了。系统学习编程,并没有培训班那么贵。 」

MT6768平台Sensor Bring Up全流程实战:从驱动添加到问题排查(附避坑指南) 本文详细介绍了联发科MT6768平台Sensor Bring Up的全流程实战指南,从驱动添加、硬件配置到问题排查,提供了全面的避坑建议。内容涵盖环境准备、驱动文件集成、硬件接口配置、编译系统适配以及常见问题解决方案,帮助开发者高效完成传感器集成与调试工作。 阅读详情

相关推荐

跨域问题 - 其他 method 都没有跨域问题,只有delete有跨域的问题

跨域的配置等一切正常,GETPOSTPUTOPTIONS都可以正常访问, 唯独有一个DELETE有跨域的问题, 经过排查发现这个DELETE请求有body, 经过一系列排查, 发现头部有一个不太正常的值是为了避免浏览器的影响, 直接在 postman 中新建一个请求, 竟然也有跨域的问题, 后来把的值改成了请求就可以正常调用了.

galoiszhou的博客 528

mybatis一级缓存

1.一级缓存 mybatis一级缓存的作用范围是session,单使用mybatis时默认是开启的; 当第一次查询时,mybatis会把查询结果已Map<cacheKey,value>的形式保存到Local cache中;当再次查询时,会先去Local cache中查询,当cacheKey存在时,返回value。 cacheKey判断是否相同 1.statementId(命名空间+方法名) 一致 2.参数一致 @Test void getUser() { try (SqlSess

weixin_44315847的博客 430

[终于解决]Ubuntu14.04 32位安装移动网卡(0bda:b711)驱动8188gu tplink-WN726n

大致梳理一下问题解决的流程 首先,在台式机做了双系统,台式机只有一个网线接口,由于项目要求,需要占用网口传输数据,所以用之前买的tplink-WN726n免驱版2.0的移动网卡 【note】免驱版只能在Windows下安装使用,在Ubuntu系统中无法使用,所以,需要另辟蹊径。 找了很多资料,尝试很多方法,有的复杂有的简单,终于解决。 【思路】首先在Ubuntu系统中输入lsusb,查看是否检测到USB网卡设备。然后从Github中复制代码,构建,安装,然后modprobe一下,到前面那步还不行,就再来一步

瑞o 1万+

MyBatis一级缓存和二级缓存

一、一级缓存 Mybatis 的一级缓存是指Session缓存。一级缓存的作用域默认是SqlSession。Mybatis默认开启一级缓存。 在同一个SqlSession中,执行相同的查询SQL,第一次会去数据库进行查询,并写到缓存中;第二次以后则直接去一级缓存中取。 当执行的SQL查询中间发生了增删改的操作,mybatis会把SqlSession的缓存清空。 一级缓存失效的情况 SqlSession不同; SqlSession相同,查询条件不同。因为缓存条件不同,缓存中还没有数据。 SqlSession

m0_50932526的博客 4423

MATLAB仿真耗散孤子共振与金兹堡-朗道方程解析

耗散孤子共振(DSR)是非线性光学中的特殊脉冲现象,通过平衡非线性效应、色散与能量耗散实现稳定传输。其核心数学模型金兹堡-朗道方程(GLE)描述了光脉冲在增益介质中的演化规律,采用分步傅里叶方法(SSFM)可高效求解这类非线性偏微分方程。该技术在光纤激光器设计、高速光通信系统优化等领域具有重要价值,特别是在需要高能量脉冲保持稳定传输的场景。MATLAB数值仿真为理解DSR物理机制提供了直观工具,通过参数扫描可验证脉冲能量与宽度的线性关系特征,并为实际器件设计提供预测依据。

weixin_31240035的博客 257

嵌入式学习的书单推荐

以上是一些优秀的嵌入式学习书单推荐。选择适合自己的学习材料对于学习嵌入式系统非常重要。每一本书籍都有其独特的优势和特点,读者可以根据自己的学习目标和兴趣选择合适的书籍。同时,我们也要注意不断实践和探索,结合实际项目和项目经验,不断提升自己的嵌入式技术水平。希望本文的推荐能够帮助大家在嵌入式学习的道路上取得更好的成果。

新程序圆 1980

mybatis中的一级缓存和二级缓存

一、mybatis缓存基本介绍 1、缓存:将相同查询条件的sql语句执行一遍后得到的结果存在内存或者某种缓存介质中,当下次遇到一模一样的查询sql时候不在执行sql与数据库交互,而是直接从缓存中获取结果,减少服务器的压力; 2、mybatis的查询缓存又分为一级缓存和二级缓存,一级缓存的作用范围为同一个sqlsession,而二级缓存的作用范围为同一个namespace和mapper。 二、一级缓...

Progran_ape的博客 3516

Kettle 连接 Oracle 数据库全流程指南

例如:C:\Oracle\product\19.0.0\dbhome_1\jdbc\lib\ojdbc8.jar 2. 替换 Kettle 驱动文件 将驱动文件复制到 Kettle 的 目录: 删除旧版本驱动:如 ojdbc14.jar 只能保留一个oracle驱动 重启 Kettle 以加载新驱动 二、配置数据库连接 1. 启动 Kettle 并新建转换 运行 (Windows)或 (Linux)。 新建转换(Transformation),添加 “表输入” 步骤,双击进入配置。 2.

qq_44724453的博客 3482

【MyBatis的一级缓存与二级缓存】

(1)MyBatis的二级缓存是SqlSessionFactory范围的,即通过同一个SqlSessionFactory所获取的SqlSession查询的数据会被缓存 使用同一SqlSessionFactory所获取的SqlSession再次查询相同的数据,会从缓存中获取,不会从数据库再次查询。(1)MyBatis一级缓存是SqlSession范围的,即通过同一个SqlSession查询的数据会被缓存使用同一个SqlSession再次查询相同的数据,会从缓存中获取,不会从数据库再次查询。

qq_48521777的博客 321

黑猫带你学UFS协议第8篇:UFS电气特性详解(Power、CLK、Reset等)

UFS强制支持secure mode。UFS设备可能会存储个人或者公司的信息,UFS提供把数据永久从设备上移除的功能,并且保证对存储介质进行逆向恢复数据也恢复不回来原有数据。安全模式是以逻辑单元为单位进行应用的,不同的逻辑单元可以有不同的安全模式。由于UFS设备的存储介质不同,所以把数据安全从存储介质上移除方式会有不同,spec提供了三种通用的移除方法,UFS设备至少支持其中一种。● 对存储的位置进行一次擦除操作。● 对存储的位置使用单一字符(比如0xAA)覆盖写,然后进行擦除。.........

黑猫奥利奥的博客 4076

【100%通过率】华为od机试C卷【部门人力分配】Python 实现

当前部门需要完成 N 个需求,需求用 requirements[i] 表示,requirements[i] 表示第 i 个需求的工作量大小,单位:人月。2:明显这个人力需求值有上下限的情况下【下限为requirements中的最大值,上限为requirements中的最大两个值相加(因为最多有两个需求同一个月开发)】,可以考虑使用二分法。当选择人力为6时,2个需求量为3的工作可以在1个月里完成,其他2个工作各需要1个月完成。当选择人力为5时,4个工作各需要1个月完成,一共需要4个月才能完成所有需求。

MISAYAONE的博客 2020

MyBatis一级缓存介绍

默认情况下,MyBatis只启用了本地的会话缓存,它仅仅对一个会话中的数据进行缓存。这也就是大家常说的MyBatis一级缓存,一级缓存的作用域是SqlSession。 MyBatis一级缓存的运行过程是这样的:执行SQL语句的过程中,首次执行它时从数据库获取的所有数据会被存储在一段高速缓存中,今后执行这条语句时就会从高速缓存中读取结果,而不是再次查询数据库。MyBatis提供了默认下基于Java HashMap的缓存实现。 重点是要明白:MyBatis执行SQL语句之后,这条语句的执行...

weixin_57763462的博客 841

098、C3k2_Ghost:用 GhostConv 替代 C3k2 内标准卷积的轻量化改造代码

本文介绍了用GhostConv轻量化改造YOLOv11中C3k2模块的实践。作者通过线上部署案例引出问题,详细解析了GhostConv的核心实现逻辑,指出直接替换标准卷积会导致的两个关键问题:通道数不匹配和kernel_size冲突。文章提供了完整的C3k2_Ghost实现代码,包含注意事项和调试技巧。消融实验显示,该方法在小模型上可减少27%-28%参数量、34%-35%FLOPs,仅损失0.8mAP。作者总结了适用场景:小模型效果显著,大模型需谨慎;检测小目标任务不推荐;训练时需调整学习率。最后强调sh

sundong_81的博客 62

【Mybatis】浅谈Mybatis的缓存机制,一级缓存和二级缓存

Mybatis的缓存机制,一级缓存和二级缓存。

qq_62555748的博客 1346

OV9734 DATASHEET,完整规格书

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

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

浅谈下mybatis 一级缓存和二级缓存

mybtis缓存 mybtis有两种缓存,一级缓存和二级缓存 Mybatis的一级缓存 一级缓存是sqlSession级别的,通过一个sqlSession查询的数据会被缓存,下次查询相同的数据,们就会从缓存中直接获取,不会从数据库重新访问 一级缓存默认开启 一级缓存失效的四种情况: 1.不通的sqlSession对应不同的一级缓存 2.同一个sqlSession但是查询条件不通 3.同一个sqlSession两次查询期间,执行了任一依次增删改操作 4.同一个sqlSession两次查询期间手动清空了缓存 M

生命不息,bug不止,一起探讨下写bug的技术吧 663

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Mybatis一级缓存和二级缓存(实验结合理论) 浅谈底层机制

mybatis一级缓存和二级缓存(实验结合理论),浅谈底层机制

weixin_45956631的博客 329

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

MyBatis的一级缓存和二级缓存有什么区别(浅谈)?

一级缓存:存在于同一个SqlSession生命周期中,在同一个SqlSession中,MyBatis会把执行的方法,SQL语句和参数通过算法生成缓存的值,将键值和结果放在一个Map中; 不同的SqlSession 之间的缓存是相互隔离的; 同一个SqlSession中,可以通过配置使得在查询前清空缓存,任何的修改,删除,插入语句都会清空缓存。 二级缓存:存在同一个SqlSessionFactory生命周期中; 缓存是以namespace为单位的,不同的namespace的操作互不影响,更新时会刷新缓

Pychc的博客 458

浅谈 MyBatis 缓存

EhCache 是一个快速的、轻量级的、易于使用的、进程内的缓存。它支持 read-only 和 read/write 缓存,内存和磁盘缓存。是一个非常轻量级的缓存实现,而且从 1.2 之后就支持了集群,目前的最新版本是 2.8。

人生嘛!无非是左脚比右脚前,右脚再比左脚前,明天比今天好! 11万+

浅谈MyBatis二级缓存

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

点滴记录 5516

Springboot整合Redis作为Mybatis的二级缓存

文章转载声明:转载请附带原文链接 0. 环境准备 以下是我本机的环境: SpringBoot2.3.x Mybatis3.x Redis5.x 本机或者服务器中搭建好redis环境,并启动成功!这里我用的是阿里云学生机上部署的redis5.x IDEA2020.x ,Eclipse2020也是可以的,编辑器选择无所谓! 1. 新版本springboot和IDEA编辑器踩坑(可以直接跳过该章节,遇到类似的错误再回头看) 如果您在实操过程中,使用的是IDEA2020 和springboot2.3.x 版.

兴趣使然的草帽路飞 1万+

浅谈mybatis二级缓存

mybatis二级缓存概述

GDFHGFHGFH的博客 464

浅谈MyBatis缓存

学过MyBatis框架的都知道,MyBatis自带一二级缓存,并且还有第三方给MyBastis提供二级缓存,例如ehcache、memcache,本文粗略的讲一下这个几个缓存的机制和使用吧。 首先解释一下缓存存在的意义:他避免了相同的sql查询语句频繁的去访问数据库。自动的把第一次查询的结果放在了缓存中,后续再次查询该同样的对象时,则直接从缓存中查询该对象即可。 一级缓存: MyBatis默认开启一级缓存,范围是同一个SqlSession对象。 public static void query() thro

JAVA领域优秀创作者 219

浅谈mybatis-Cache

mybatis-cache简介源码解读缓存使用总结&反思 每次在编写文章之前自己都喜欢先来个感想,今天的话题是多读英文文档,好处多多!什么情况下要考虑缓存问题呢?一般微服务架构设计时,分布式应用可能导致脏数据,特别是在秒杀情况下需要特别注意(可以接入外部二级缓存) 简介 文档中已经很明显说明了什么cashe,什么是一级缓存和二次缓存。个人就总结为:缓存即相同查询时,在没有发生更新、提交、回滚和关闭时,多次查询不会从数据库中返回,直接从Cashe的缓存实现类中返回。一级缓存居于sqlsesson缓存,

soft_z1302的博客 2516
上一篇: [转]Java校招入职华为,半年后我跑路了
下一篇: 为什么牛逼的程序员都不用 “ ! = null “ 做判空?
yi博说
博客等级 码龄11年 20粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值