mybatis-plus如何开启二级缓存
时间: 2023-07-18 18:26:23 浏览: 48
要开启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二级缓存的步骤,希望对你有所帮助!