Mybatis-plus缓存

mybatis-plus缓存

MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上提供了更多的便利性和强大的功能,包括但不限于分页、条件构造器、通用 Mapper、代码生成器等。MyBatis-Plus 也内置了基础的缓存功能,但需要注意的是,MyBatis-Plus 本身并不提供复杂的缓存机制,例如二级缓存。不过,你可以通过集成第三方缓存框架或者使用 MyBatis-Plus 提供的简单缓存机制来实现缓存功能。

1. MyBatis-Plus 简单缓存

MyBatis-Plus 提供了一种简单的缓存机制,可以通过配置来实现。这种方式适用于一些简单的场景,比如查询结果不经常变更的场景。

配置方法:

在 mybatis-config.xml 文件中配置:

xml 复制代码
<settings>
    <!-- 开启二级缓存 -->
    <setting name="cacheEnabled" value="true"/>
</settings>

在 Mapper 接口对应的 XML 文件中或者使用注解的方式开启缓存:

xml 复制代码
<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>

或者使用 @CacheNamespace 注解:

java 复制代码
@Mapper
@CacheNamespace(implementation = MyCache.class, eviction = CacheType.LRU, size = 1024, readWrite = false)
public interface YourMapper {
    // methods
}

2. 使用第三方缓存框架

对于更复杂的缓存需求,例如需要分布式缓存、更高级的缓存策略等,你可以考虑集成如 Redis、Ehcache、Guava Cache 等第三方缓存框架。

示例:集成 Redis 缓存

添加依赖:首先需要在项目的 pom.xml 中添加 Redis 和 MyBatis-Plus-Redis-Cache 的依赖。

xml 复制代码
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>你的版本号</version>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>你的版本号</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

配置 Redis:在 application.properties 或 application.yml 中配置 Redis。

yaml 复制代码
spring:
  redis:
    host: localhost
    port: 6379
    password: yourpassword # 如果不需要密码则不设置或设置为空字符串 ""

集成 MyBatis-Plus Redis 缓存:使用 MyBatis-Plus Redis 缓存插件。首先需要添加对应的插件依赖,然后配置插件。

java 复制代码
@Configuration
public class MybatisPlusConfig {
    @Bean
    public RedisCache redisCache() {
        return new RedisCache(); // 直接使用默认配置即可,或者根据需要自定义配置
    }
}

使用:在你的 Mapper 接口或 XML 中使用缓存注解或标签,例如 @Cacheable。注意这种方式通常用于方法级别的缓存。例如:

java 复制代码
@Select("SELECT * FROM user WHERE id = #{id}")
@Options(useCache = true) // 开启缓存支持,依赖于你的缓存配置和实现方式
User selectById(@Param("id") Integer id);

或者使用第三方库提供的注解如 Spring 的 @Cacheable。这通常需要额外的配置和上下文管理。

java 复制代码
@Cacheable(value = "userCache", key = "#p0") // 使用 Spring 的 @Cacheable 注解进行缓存管理,需要 Spring 的缓存抽象支持。确保你的方法在 Spring 的 Bean 中。 
User selectUserById(Integer id); 

注意这里的 value 是缓存的名字,key 是缓存的键。你需要根据实际情况调整这些值。同时确保你的方法是在 Spring 的 Bean 中定义的,这样 Spring 的缓存抽象才能正确工作。对于复杂的缓存策略(如条件缓存、过期策略等),你可能需要自定义 CacheManager 和 CacheResolver 等。这通常涉及到更复杂的配置和代码实现。

对于复杂的业务场景

相关推荐
ss2731 天前
020:共享锁深度解析:从AQS原理到高并发实践
数据库·redis·缓存
q***46521 天前
Win10下安装 Redis
数据库·redis·缓存
晚风吹人醒.1 天前
缓存中间件Redis安装及功能演示、企业案例
linux·数据库·redis·ubuntu·缓存·中间件
老前端的功夫1 天前
前端浏览器缓存深度解析:从网络请求到极致性能优化
前端·javascript·网络·缓存·性能优化
q***87602 天前
yum安装redis
数据库·redis·缓存
空空kkk2 天前
MyBatis——代理Dao方式的增删改查操作
java·数据库·mybatis
2501_941800883 天前
Java高性能搜索引擎与Lucene实战分享:大规模文本索引、检索与优化经验
mybatis
大猫子的技术日记3 天前
[百题重刷]前缀和 + Hash 表:缓存思想, 消除重复计算
java·缓存·哈希算法
愤怒的山羊3 天前
jetcache List 缓存, json 序列化 泛型解析成了 JsonObject 处理
缓存·json·list
树在风中摇曳3 天前
带哨兵位的双向循环链表详解(含 C 代码)+ LeetCode138 深度解析 + 顺序表 vs 链表缓存机制对比(图解 CPU 层级)
c语言·链表·缓存