mybatis的缓存内容(下)

简介: mybatis的缓存内容

mybatis的缓存内容(上)https://developer.aliyun.com/article/1429068

2.二级缓存

1.概念

二级缓存是MyBatis提供的全局性的缓存机制。它是指跨SqlSession的缓存,即多个SqlSession共享同一个缓存区域,因此可以避免多个SqlSession重复查询相同的数据。二级缓存需要在MyBatis的配置文件中开启,并在Mapper.xml文件中指定使用二级缓存。另外,需要注意的是,如果数据库中的数据发生了变化,则缓存中的数据也需要更新,MyBatis提供了相应的缓存策略来解决这个问题。

2.实现

简单来说就是通过同一个sqlSessionFactory提供的sqlSeesion那么它们共享一个缓存区

默认情况下,只启用了本地的会话缓存,它仅仅对一个会话中的数据进行缓存。 要启用全局的二级缓存,只需要在你的 SQL 映射文件中添加一行:

<cache/>

因为我们需要通过一个sqlFactory工厂所以上面的工具类是无法使用的,并且表 对应的实体类必须要序列化接口Serializable

代码进行修改如下:

InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resourceAsStream);
  参数true开启自动提交
SqlSession sqlSession = factory.openSession(true);
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
mapper.selectEmpById(1);
  注意一定要关闭第一个sqlSession要不然缓存还是将保存到一级缓存
sqlSession.close();
SqlSession sqlSession2 = factory.openSession(true);
EmpMapper mapper1 = sqlSession2.getMapper(EmpMapper.class);
mapper1.selectEmpById(1);

对应的实体类

ackage com.guigu.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Emp implements Serializable {
    private String id;
    private String empUsername;
    private Integer deptId;
    private Dept dept;
}

观看运行日志如下

只要Cache Hit Ratio(缓存命中率)不为0就代表成功

3.缓存查询的顺序

先查询而二级缓存,有因为二级缓存中可能会有其他程序已经查询出来的数据,直接拿出来用即可

如过二级缓存没有,在查一级缓存。

如果一级缓存也没有则查询数据库

SqlSession关闭之后,一级缓存中的数据会写入二级缓存

目录
相关文章
|
2月前
|
缓存 Java 数据库连接
Mybatis缓存相关面试题有多卷
使用 MyBatis 缓存机制需要注意以下几点: 对于频繁更新和变动的数据,不适合使用缓存。 对于数据的一致性要求比较高的场景,不适合使用缓存。 如果配置了二级缓存,需要确保缓存的数据不会影响到其他业务模块的数据。 在使用缓存时,需要注意缓存的命中率和缓存的过期策略,避免缓存过期导致查询性能下降。
58 0
|
1月前
|
SQL 缓存 Java
MYBATIS缓存
MYBATIS缓存
|
27天前
|
缓存 NoSQL Java
在 SSM 架构(Spring + SpringMVC + MyBatis)中,可以通过 Spring 的注解式缓存来实现 Redis 缓存功能
【6月更文挑战第18天】在SSM(Spring+SpringMVC+MyBatis)中集成Redis缓存,涉及以下步骤:添加Spring Boot的`spring-boot-starter-data-redis`依赖;配置Redis连接池(如JedisPoolConfig)和连接工厂;在Service层使用`@Cacheable`注解标记缓存方法,指定缓存名和键生成策略;最后,在主配置类启用缓存注解。通过这些步骤,可以利用Spring的注解实现Redis缓存。
51 2
|
17天前
|
SQL 缓存 Java
Java框架之MyBatis 07-动态SQL-缓存机制-逆向工程-分页插件
Java框架之MyBatis 07-动态SQL-缓存机制-逆向工程-分页插件
|
2月前
|
XML 缓存 Java
MyBatis二级缓存解密:深入探究缓存机制与应用场景
MyBatis二级缓存解密:深入探究缓存机制与应用场景
222 2
MyBatis二级缓存解密:深入探究缓存机制与应用场景
|
2月前
|
存储 缓存 Java
探秘MyBatis缓存原理:Cache接口与实现类源码分析
探秘MyBatis缓存原理:Cache接口与实现类源码分析
48 2
探秘MyBatis缓存原理:Cache接口与实现类源码分析
|
2月前
|
缓存 Java 数据库连接
MyBatis三级缓存实战:高级缓存策略的实现与应用
MyBatis三级缓存实战:高级缓存策略的实现与应用
57 0
MyBatis三级缓存实战:高级缓存策略的实现与应用
|
2月前
|
缓存 Java 数据库连接
【Mybatis】说一下 mybatis 的一级缓存和二级缓存
【Mybatis】说一下 mybatis 的一级缓存和二级缓存
|
2月前
|
存储 缓存 Java
什么!?实战项目竟然撞到阿里面试的原题!???关于MyBatis Plus的缓存机制
什么!?实战项目竟然撞到阿里面试的原题!???关于MyBatis Plus的缓存机制
|
2月前
|
缓存 Java 数据库连接
mybatis 数据库缓存的原理
MyBatis 是一个流行的 Java 持久层框架,它封装了 JDBC,使数据库交互变得更简单、直观。MyBatis 支持两级缓存:一级缓存(Local Cache)和二级缓存(Global Cache),通过这两级缓存可以有效地减少数据库的访问次数,提高应用性能。
296 1