Mybatis Plus 之开启、关闭二级缓存

本文介绍如何在MybatisPlus中配置全局二级缓存,包括在XML文件中添加缓存策略,如回收策略、刷新间隔、引用数目及读写模式,并说明如何禁用特定接口的缓存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、开启MybatisPlus的全局配置:

#二级缓存
mybatis-plus.global-config.configuration.map-underscore-to-camel-case= true
mybatis-plus.global-config.configuration.cache-enabled=true

二、在对应的xml文件中,添加配置:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mapper.TableMapper">
          
        <!-- 开启二级缓存,以下是各参数解释: -->
        <!--1. eviction:缓存回收策略:• 默认的是 LRU。
 				LRU – 最近最少使用的:移除最长时间不被使用的对象。
				FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
				SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。
				WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。
			2. flushInterval:刷新间隔,单位毫秒
				默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句时刷新
			3. size:引用数目,正整数
				代表缓存最多可以存储多少个对象,太大容易导致内存溢出
			4. readOnly:只读,true/false
                true:只读缓存;会给所有调用者返回缓存对象的相同实例。因此这些对象不能被修改。这提供了很重要的性能优势。
				false:读写缓存;会返回缓存对象的拷贝(通过序列化)。这会慢一些,但是安全,因此默认是 false。
-->
        <cache eviction="FIFO" flushInterval="60000" size="1024" readOnly="true" />
        
</mapper>

三、如果有写接口无需二级缓存,可在对应的地方添加:useCache=“false”

<select id="getCount" resultType="int" useCache="false">
       select count(1) from table
</select>
注意:添加二级缓存的xml,对应的entity需要实现Serializable接口
开启MyBatis-Plus二级缓存,你需要遵循以下步骤: 1. 配置MyBatis-Plus的全局配置,开启二级缓存 在application.yml或application.properties文件中添加以下配置: ``` mybatis-plus: configuration: cache-enabled: true ``` 2. 在需要缓存的Mapper接口上添加@CacheNamespace注解 例如: ```java @Mapper @CacheNamespace(implementation=MybatisRedisCache.class, eviction=FifoCache.class, flushInterval=60000, size=1024) public interface UserMapper extends BaseMapper<User> { // ... } ``` 其中,@CacheNamespace注解的参数含义如下: - implementation:缓存实现类,默认使用PerpetualCache; - eviction:缓存淘汰算法,默认使用LRU(Least Recently Used)算法; - flushInterval:缓存刷新时间,默认刷新; - size:缓存容量大小,默认限制。 3. 配置缓存实现类 可以使用MyBatis-Plus提供的默认缓存实现类PerpetualCache,也可以自定义缓存实现类,例如使用Redis作为缓存实现类,需要自定义MybatisRedisCache类,继承org.apache.ibatis.cache.Cache接口,并实现相关方法。 ```java public class MybatisRedisCache implements Cache { private final String id; private RedisTemplate<String, Object> redisTemplate; public MybatisRedisCache(String id) { if (id == null) { throw new IllegalArgumentException("Cache instances require an ID"); } this.id = id; } @Override public String getId() { return id; } @Override public void putObject(Object key, Object value) { redisTemplate.opsForValue().set(key.toString(), value); } @Override public Object getObject(Object key) { return redisTemplate.opsForValue().get(key.toString()); } @Override public Object removeObject(Object key) { redisTemplate.delete(key.toString()); return null; } @Override public void clear() { redisTemplate.execute((RedisCallback<?>) connection -> { connection.flushDb(); return null; }); } @Override public int getSize() { return Integer.MAX_VALUE; } @Override public ReadWriteLock getReadWriteLock() { return null; } public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) { this.redisTemplate = redisTemplate; } } ``` 4. 配置RedisTemplate 在Spring Boot中配置RedisTemplate: ```java @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); return redisTemplate; } ``` 以上就是开启MyBatis-Plus二级缓存的步骤,希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值