当前位置: 首页 > news >正文

【坑】Spring Boot整合MyBatis,一级缓存失效

一、Spring Boot整合MyBatis,一级缓存失效

1.1、概述

        MyBatis一级缓存的作用域是同一个SqlSession,在同一个SqlSession中执行两次相同的查询,第一次执行完毕后,Mybatis会将查询到的数据缓存起来(缓存到内存中), 第二次执行相同的查询时,会从缓存中取数据,不再进行数据库的查询,从而提高查询效率。默认情况下,Mybatis开启了一级缓存。但是MyBatis整合Spring Boot时,一级缓存却没有生效。

1.2、代码

/*** 验证MyBatis的一级缓存默认是开启的*/
@Test
public void getUserByIdTest() {UserMapper userMapper = sqlSession.getMapper(UserMapper.class);UserDO userDO1 = userMapper.getUserById(1L);System.out.println("userDO1 = " + userDO1);System.out.println("====================");UserDO userDO2 = userMapper.getUserById(1L);System.out.println("userDO2 = " + userDO2);
}

1.3、失效原因

        当同一个线程开启事务时,同一个sql查询多次会走一级缓存,而不开启事务时,每一查询都是不同的sqlsession,即缓存为“失效”状态 。

1.4、解决

        添加 @Transactional 注解。

/*** 验证MyBatis的一级缓存默认是开启的*/
@Transactional
@Test
public void getUserByIdTest() {UserMapper userMapper = sqlSession.getMapper(UserMapper.class);UserDO userDO1 = userMapper.getUserById(1L);System.out.println("userDO1 = " + userDO1);System.out.println("====================");UserDO userDO2 = userMapper.getUserById(1L);System.out.println("userDO2 = " + userDO2);
}

 

相关文章:

  • 微服务三十五关
  • Windows 10 优化指南20240223
  • QT_day4
  • 深入理解Java单例模式
  • https://registry.npm.taobao.org淘宝npm镜像仓库地址更新
  • STM32F4XX - uart设置
  • 2024年漳州本地有正规等保测评机构吗?在哪里?
  • vue2+element医院安全(不良)事件报告管理系统源代码
  • Stable Diffusion 模型的概念、类型、下载、安装、使用
  • C# OpenCvSharp 颜色反转
  • 论文精读--GPT1
  • 【操作系统】磁盘存储空间的管理
  • List集合之UML、特点、遍历方式、迭代器原理、泛型、装拆箱及ArrayList、LinkedList和Vector的区别
  • 在Linux操作系统的ECS实例上安装Hive
  • mysql 输出所在月份的最后一天
  • css系列之关于字体的事
  • export和import的用法总结
  • HomeBrew常规使用教程
  • js算法-归并排序(merge_sort)
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Linux Process Manage
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Material Design
  • mysql外键的使用
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • Vue官网教程学习过程中值得记录的一些事情
  • 闭包--闭包之tab栏切换(四)
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 技术胖1-4季视频复习— (看视频笔记)
  • 类orAPI - 收藏集 - 掘金
  • 容器服务kubernetes弹性伸缩高级用法
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 学习Vue.js的五个小例子
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 《天龙八部3D》Unity技术方案揭秘
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • #HarmonyOS:Web组件的使用
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • ${factoryList }后面有空格不影响
  • (20050108)又读《平凡的世界》
  • (Java数据结构)ArrayList
  • (libusb) usb口自动刷新
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (转)http协议
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)可以带来幸福的一本书
  • ***通过什么方式***网吧
  • .Mobi域名介绍