系列六、Mybatis的一级缓存

一、概述

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

二、一级缓存(生效)案例演示

2.1、 CacheTest

java 复制代码
@Test
public void test1() {
	UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
	UserDO u1 = userMapper.getUserById(1);
	System.out.println("u1 = " + u1);
	System.out.println("===============");
	UserDO u2 = userMapper.getUserById(1);
	System.out.println("u2 = " + u2);
}

三、一级缓存(失效)案例(原因)演示

3.1、两次查询使用的不是同一个sqlSession

java 复制代码
/**
 * mybatis的一级缓存失效的第一种原因:两次查询使用的不是同一个sqlSession
 */
private static void m1() {
	SqlSession sqlSession1 = SqlSessionFactoryUtil.getInstance().openSession();
	SqlSession sqlSession2 = SqlSessionFactoryUtil.getInstance().openSession();
	UserMapper userMapper1 = sqlSession1.getMapper(UserMapper.class);
	UserMapper userMapper2 = sqlSession2.getMapper(UserMapper.class);

	UserDO u1 = userMapper1.getUserById(1);
	System.out.println(u1);

	System.out.println("=================");

	UserDO u2 = userMapper2.getUserById(1);
	System.out.println(u2);
}

3.2、两次查询之间有增删改的操作

java 复制代码
/**
 * mybatis的一级缓存失效的第二种原因:两次查询之间有增删改的操作
 */
private void m12() {
	UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

	UserDO u1 = userMapper.getUserById(1);
	System.out.println(u1);

	int result = userMapper.delUserById(2);
	System.out.println("result = " + result);

	UserDO u2 = userMapper.getUserById(1);
	System.out.println(u2);
}

3.3、两次查询的查询条件不一样

java 复制代码
/**
 * mybatis的一级缓存失效的第三种原因:两次查询的查询条件不一样
 */
private void m13() {
	UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

	UserDO u1 = userMapper.getUserById(1);
	System.out.println(u1);

	UserDO u2 = userMapper.getUserById(2);
	System.out.println(u2);
}
相关推荐
步行cgn4 小时前
Spring c 命名空间注入详解
java·后端·spring
明月_清风4 小时前
Maven 到底是什么?一篇文章搞懂 Java 项目构建与依赖管理
java·后端·maven
aramae4 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
Rain的Java大神之路5 小时前
如何快速上传10G文件
java·spring boot·redis·后端·mysql·spring cloud·面试
Wang's Blog6 小时前
Java 接入Redis: 通用命令与键管理
java·服务器·redis
Wang's Blog6 小时前
Java 接入Redis: 列表集合与有序集合操作命令
java·服务器·redis
Ivanqhz6 小时前
SVD++算法
java·服务器·网络·深度学习·神经网络
Together_CZ6 小时前
DeepSeek-V4.1-Flash:Pushing the Limits of KV Cache Compression——推动 KV 缓存压缩的极限
缓存·llm·compression·kv cache·deepseek·v4.1-flash·推动 kv 缓存压缩的极限
qq_2518364577 小时前
springboot vue3 开发实现 拼豆管理系统
java·开发语言·ai编程
caoerzhong7 小时前
JeeWMS 开源仓库管理系统全景解读:一套 Java WMS 如何把 WMS/OMS/BMS/TMS 装进同一个系统
java·开源