系列六、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);
}
相关推荐
那我掉的头发算什么10 分钟前
【数据库】增删改查 高阶(超级详细)保姆级教学
java·数据库·数据仓库·sql·mysql·性能优化·数据库架构
在坚持一下我可没意见41 分钟前
Java 网络编程:TCP 与 UDP 的「通信江湖」(基于TCP回显服务器)
java·服务器·开发语言·笔记·tcp/ip·udp·java-ee
cr7xin1 小时前
缓存查询逻辑及问题解决
数据库·redis·后端·缓存·go
大卫小东(Sheldon)1 小时前
使用JMH对远程接口进行压测
java
学习编程之路1 小时前
Rust内存对齐与缓存友好设计深度解析
开发语言·缓存·rust
JMzz1 小时前
Rust 中的内存对齐与缓存友好设计:性能优化的隐秘战场 ⚡
java·后端·spring·缓存·性能优化·rust
Java水解1 小时前
2026java面试题(含答案,持续更新中)
java·后端·面试
何中应1 小时前
Oracle数据库安装(Windows)
java·数据库·后端·oracle
Han.miracle1 小时前
Java的多线程——多线程(二)
java·开发语言·线程·多线程