一、MyBatis-Plus緩存機制全景解析
MyBatis-Plus在MyBatis原生緩存基礎上進行了深度增強,形成了多層次的緩存體系:
1. 緩存層級架構
應用層
├── MP擴展緩存(多租戶/邏輯刪除)
├── 二級緩存(Mapper級別,跨Session共享)
└── 一級緩存(SqlSession級別,默認開啟)
2. 核心優勢對比
特性 | MyBatis原生 | MyBatis-Plus增強 |
---|---|---|
配置方式 | XML為主 | 注解+配置類 |
自動刷新 | 手動控制 | 內置智能刷新邏輯 |
多租戶支持 | 無 | 內置SQL解析緩存 |
監控能力 | 基礎 | 增強的統計功能 |
二、SpringBoot整合完整配置指南
1. 基礎配置(application.yml)
mybatis-plus:configuration:cache-enabled: true # 開啟二級緩存local-cache-scope: session # 一級緩存作用域(SESSION/STATEMENT)global-config:db-config:logic-delete-field: deleted # 邏輯刪除字段名logic-not-delete-value: 0 # 未刪除標記值
2. 實體類緩存注解配置
/*** 用戶實體類* @CacheNamespace 聲明使用自定義Redis緩存實現*/
@TableName("sys_user")
@CacheNamespace(implementation = MybatisRedisCache.class, // 緩存實現類eviction = MybatisRedisCache.class, // 淘汰策略類size = 1000, // 緩存最大容量readWrite = true // 讀寫模式
)
public class User implements Serializable {@TableId(type = IdType.AUTO)private Long id;@TableField(condition = SqlCondition.LIKE)private String username;@TableLogicprivate Integer deleted; // 邏輯刪除標記字段
}
3. 自定義Redis緩存實現(帶注釋版)
/*** 自定義Redis緩存實現類*/
public class MybatisRedisCache implements Cache {// 讀寫鎖保證線程安全private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();private final String id; // Mapper namespace標識private final RedisTemplate<String, Object> redisTemplate;public MybatisRedisCache(String id) {this.id = id;// 從Spring容器獲取RedisTemplate實例this.redisTemplate = (RedisTemplate<String, Object>) SpringContextHolder.getBean("redisTemplate");}@Overridepublic String getId() {return this.id;}@Overridepublic void putObject(Object key, Object value) {// 設置緩存,有效期2小時redisTemplate.opsForValue().set(key.toString(), value, 2, TimeUnit.HOURS);}@Overridepublic Object getObject(Object key) {// 從Redis獲取緩存return redisTemplate.opsForValue().get</