mybatisplus清除缓存
时间: 2023-10-06 14:10:00 浏览: 397
MyBatis-Plus是MyBatis的增强工具,它提供了更多的功能和便利的操作。与MyBatis一样,MyBatis-Plus也支持一级缓存和二级缓存。清除缓存的方法是通过调用`SqlSession`的`clearCache()`方法来实现,即`sqlSession.clearCache()`。
相关问题
mybatisplus 清除缓存
### 关于 MyBatis Plus 的缓存清除方法
MyBatis Plus 是基于 MyBatis 的增强工具,在其核心功能上提供了更多的便捷特性。然而,MyBatis 自身支持一级和二级缓存机制。对于清除缓存的需求,可以通过以下方式实现。
#### 一、MyBatis 默认的一级缓存
MyBatis 的一级缓存默认作用范围是同一个 `SqlSession` 中的数据操作会话。当执行更新语句时,该 `SqlSession` 的一级缓存会被自动清空[^2]。因此无需额外配置即可完成一级缓存的清理工作。
#### 二、MyBatis 的二级缓存
如果启用了 MyBatis 的二级缓存,则需要手动调用 API 来清除缓存数据。以下是具体的操作:
1. **通过 Mapper 接口清除指定命名空间下的缓存**
可以使用 `clearCache()` 方法来清除当前 Mapper 命名空间中的二级缓存。
```java
mapper.clearCache();
```
2. **全局清除所有 Mapper 缓存**
如果希望一次性清除整个应用中所有的二级缓存,可以借助 `org.apache.ibatis.session.SqlSession` 提供的功能:
```java
sqlSession.clearCache();
```
需要注意的是,上述两种方式仅适用于 MyBatis 的内置缓存逻辑,并不涉及外部集成的第三方缓存组件(如 Redis 或 Ehcache)。如果有自定义缓存方案,则需单独处理对应的缓存清除逻辑。
#### 三、结合 Spring Cache 使用的情况
在实际开发过程中,通常还会将 MyBatis 和 Spring Cache 结合起来使用。此时,缓存管理由 Spring 负责,而具体的缓存存储介质可能是 Redis、Caffeine 等。在这种场景下,要清除某个特定键值对或者批量删除某些匹配模式的缓存项,可采用如下代码片段:
```java
@Autowired
private CacheManager cacheManager;
public void evictAllCaches() {
Collection<String> cacheNames = cacheManager.getCacheNames();
for (String name : cacheNames) {
Cache cache = cacheManager.getCache(name);
if (null != cache) {
cache.clear(); // Clear all entries from this specific cache.
}
}
}
```
此部分逻辑并未提及 SimpleCacheManager 配置细节,但可以根据业务需求调整失效时间和策略设置[^1]。
---
mybatisplus 查询缓存
### MyBatis Plus 查询缓存的使用方法与配置
#### 一级缓存
MyBatis的一级缓存作用域是同一个`SqlSession`,在同一`SqlSession`中执行两次相同查询时,首次查询后MyBatis会把查得的数据存储于内存缓存里;当再次发出同样的查询请求,则直接从缓存读取数据而不访问数据库,以此提升查询效率[^1]。
然而,默认开启的一级缓存可能在某些集成环境下失效,比如MyBatis整合Spring Boot的情况下。这通常是因为每次操作都会创建新的`SqlSession`实例所致。因此,在这种环境中利用一级缓存的效果有限。
#### 二级缓存配置
为了更有效地实现跨`SqlSession`甚至整个应用程序级别的缓存机制,可以启用MyBatis的二级缓存功能。对于MyBatis Plus而言,其继承并扩展了这一特性:
- **全局配置文件**:可以在application.yml或application.properties中定义如下属性来激活二级缓存:
```yaml
mybatis-plus:
cache:
enabled: true
```
- **Mapper接口声明**:确保对应的Mapper接口上标注有`@CacheNamespace`注解(如果采用XML映射则需相应调整)。此注解允许开发者指定缓存的具体参数,如使用的缓存实现类、清除策略等。
```java
import org.apache.ibatis.cache.Cache;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface UserMapper extends BaseMapper<User> {
}
```
需要注意的是,虽然上述代码片段未显示显式的`@CacheNamespace`应用,但在实际项目开发过程中应当依据具体需求添加该注解及其必要配置项。
- **自定义缓存管理器**:如果有特殊的需求,还可以通过编写自己的缓存提供者来自定义缓存行为。例如基于Redis或其他分布式缓存解决方案构建高效的缓存层。
#### 性能优化建议
除了正确配置和使用查询缓存外,还应考虑其他方面的性能调优措施,诸如合理设计SQL语句结构、充分利用索引以及实施批量处理等方式来进一步增强系统的响应速度和服务质量[^2]。
阅读全文
相关推荐














