一、MyBatis Plus 官方插件列表
-
核心插件(InnerInterceptor 实现类)
(1)分页插件
javaPaginationInnerInterceptor(2)乐观锁插件
javaOptimisticLockerInnerInterceptor(3)防止全表更新与删除插件
javaBlockAttackInnerInterceptor(4)SQL 性能规范插件
javaIllegalSQLInnerInterceptor(5)动态表名插件
javaDynamicTableNameInnerInterceptor(6)多租户插件
javaTenantLineInnerInterceptor(7)数据权限插件
javaDataPermissionInterceptor // 已废弃,推荐使用 TenantLineInnerInterceptor 或自定义(8)字段加解密插件
javaEncryptorInnerInterceptor // v3.5.0+ 版本提供(9)关联查询插件(已废弃)
javainnerInterceptor(new JsqlParserCountOptimize()) -
其他重要插件和组件
(10)SQL 注入器(不是插件,但功能类似)
javaISqlInjector- LogicSqlInjector - 逻辑删除注入器
- DefaultSqlInjector - 默认注入器
- 可自定义实现,用于注入自定义方法
(11)主键生成器
javaIdentifierGenerator- DefaultIdentifierGenerator - 默认(雪花算法)
- CustomIdGenerator - 自定义
- UUID - UUID 生成器
(12)ID 类型处理器
javaIdType控制主键生成策略
(13)元对象处理器
javaMetaObjectHandler用于自动填充字段(如 create_time, update_time)
(14)性能分析插件(已废弃,推荐使用 p6spy)
javaPerformanceInterceptor // 已废弃
完整配置示例(包含所有可用插件)
java
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 1. 多租户插件(必须最先添加)
interceptor.addInnerInterceptor(tenantLineInnerInterceptor());
// 2. 动态表名插件
interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor());
// 3. 分页插件
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
// 4. 乐观锁插件
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
// 5. 字段加解密插件(v3.5.0+)
// interceptor.addInnerInterceptor(new EncryptorInnerInterceptor());
// 6. 防止全表更新与删除插件
interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
// 7. SQL 性能规范插件
interceptor.addInnerInterceptor(new IllegalSQLInnerInterceptor());
return interceptor;
}
// 多租户配置
@Bean
public TenantLineInnerInterceptor tenantLineInnerInterceptor() {
return new TenantLineInnerInterceptor(new TenantLineHandler() {
@Override
public Expression getTenantId() {
return new LongValue(1L); // 实际应从上下文获取
}
@Override
public String getTenantIdColumn() {
return "tenant_id";
}
@Override
public boolean ignoreTable(String tableName) {
return "sys_config".equals(tableName); // 忽略系统配置表
}
});
}
// 动态表名配置
@Bean
public DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor() {
DynamicTableNameInnerInterceptor interceptor = new DynamicTableNameInnerInterceptor();
Map<String, TableNameHandler> handlerMap = new HashMap<>();
handlerMap.put("order", (sql, tableName) -> {
// 动态表名逻辑
return tableName + "_2024";
});
interceptor.setTableNameHandlerMap(handlerMap);
return interceptor;
}
// 自动填充处理器
@Bean
public MetaObjectHandler metaObjectHandler() {
return new MetaObjectHandler() {
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
};
}
// 自定义主键生成器
@Bean
public IdentifierGenerator idGenerator() {
return new CustomIdGenerator();
}
// 自定义 SQL 注入器
@Bean
public MybatisPlusPropertiesCustomizer plusPropertiesCustomizer() {
return plusProperties -> plusProperties.getGlobalConfig().setSqlInjector(new MySqlInjector());
}
}
// 自定义 ID 生成器
class CustomIdGenerator implements IdentifierGenerator {
@Override
public Number nextId(Object entity) {
// 返回自定义 ID
return SnowFlakeUtil.nextId();
}
@Override
public String nextUUID(Object entity) {
return UUID.randomUUID().toString().replaceAll("-", "");
}
}