系列六、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);
}
相关推荐
wr2005148 分钟前
第二次作业,渗透
java·后端·spring
阿蒙Amon36 分钟前
C#每日面试题-Thread.Sleep和Task.Delay的区别
java·数据库·c#
Haooog37 分钟前
AI应用代码生成平台
java·学习·大模型·langchain4j
爬山算法1 小时前
Hibernate(67)如何在云环境中使用Hibernate?
java·后端·hibernate
黎雁·泠崖1 小时前
Java抽象类与接口:定义+区别+实战应用
java·开发语言
2301_792580001 小时前
xuepso
java·服务器·前端
露天赏雪1 小时前
Java 高并发编程实战:从线程池到分布式锁,解决生产环境并发问题
java·开发语言·spring boot·分布式·后端·mysql
夏幻灵1 小时前
面向对象编程综合实战
java
NMIXX爻2 小时前
线程控制 下
java·开发语言·jvm
时艰.2 小时前
JVM 垃圾收集器(G1&ZGC)
java·jvm·算法