一、MyBatis Plus 官方插件列表
核心插件(InnerInterceptor 实现类)
(1)分页插件
PaginationInnerInterceptor(2)乐观锁插件
OptimisticLockerInnerInterceptor(3)防止全表更新与删除插件
BlockAttackInnerInterceptor(4)SQL 性能规范插件
IllegalSQLInnerInterceptor(5)动态表名插件
DynamicTableNameInnerInterceptor(6)多租户插件
TenantLineInnerInterceptor(7)数据权限插件
DataPermissionInterceptor// 已废弃,推荐使用 TenantLineInnerInterceptor 或自定义(8)字段加解密插件
EncryptorInnerInterceptor// v3.5.0+ 版本提供(9)关联查询插件(已废弃)
innerInterceptor(newJsqlParserCountOptimize())其他重要插件和组件
(10)SQL 注入器(不是插件,但功能类似)
ISqlInjector- LogicSqlInjector - 逻辑删除注入器
- DefaultSqlInjector - 默认注入器
- 可自定义实现,用于注入自定义方法
(11)主键生成器
IdentifierGenerator- DefaultIdentifierGenerator - 默认(雪花算法)
- CustomIdGenerator - 自定义
- UUID - UUID 生成器
(12)ID 类型处理器
在这里插入代码片控制主键生成策略
(13)元对象处理器
MetaObjectHandler用于自动填充字段(如 create_time, update_time)
(14)性能分析插件(已废弃,推荐使用 p6spy)
PerformanceInterceptor// 已废弃
完整配置示例(包含所有可用插件)
@ConfigurationpublicclassMybatisPlusConfig{@BeanpublicMybatisPlusInterceptormybatisPlusInterceptor(){MybatisPlusInterceptorinterceptor=newMybatisPlusInterceptor();// 1. 多租户插件(必须最先添加)interceptor.addInnerInterceptor(tenantLineInnerInterceptor());// 2. 动态表名插件interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor());// 3. 分页插件interceptor.addInnerInterceptor(newPaginationInnerInterceptor(DbType.MYSQL));// 4. 乐观锁插件interceptor.addInnerInterceptor(newOptimisticLockerInnerInterceptor());// 5. 字段加解密插件(v3.5.0+)// interceptor.addInnerInterceptor(new EncryptorInnerInterceptor());// 6. 防止全表更新与删除插件interceptor.addInnerInterceptor(newBlockAttackInnerInterceptor());// 7. SQL 性能规范插件interceptor.addInnerInterceptor(newIllegalSQLInnerInterceptor());returninterceptor;}// 多租户配置@BeanpublicTenantLineInnerInterceptortenantLineInnerInterceptor(){returnnewTenantLineInnerInterceptor(newTenantLineHandler(){@OverridepublicExpressiongetTenantId(){returnnewLongValue(1L);// 实际应从上下文获取}@OverridepublicStringgetTenantIdColumn(){return"tenant_id";}@OverridepublicbooleanignoreTable(StringtableName){return"sys_config".equals(tableName);// 忽略系统配置表}});}// 动态表名配置@BeanpublicDynamicTableNameInnerInterceptordynamicTableNameInnerInterceptor(){DynamicTableNameInnerInterceptorinterceptor=newDynamicTableNameInnerInterceptor();Map<String,TableNameHandler>handlerMap=newHashMap<>();handlerMap.put("order",(sql,tableName)->{// 动态表名逻辑returntableName+"_2024";});interceptor.setTableNameHandlerMap(handlerMap);returninterceptor;}// 自动填充处理器@BeanpublicMetaObjectHandlermetaObjectHandler(){returnnewMetaObjectHandler(){@OverridepublicvoidinsertFill(MetaObjectmetaObject){this.strictInsertFill(metaObject,"createTime",LocalDateTime.class,LocalDateTime.now());this.strictInsertFill(metaObject,"updateTime",LocalDateTime.class,LocalDateTime.now());}@OverridepublicvoidupdateFill(MetaObjectmetaObject){this.strictUpdateFill(metaObject,"updateTime",LocalDateTime.class,LocalDateTime.now());}};}// 自定义主键生成器@BeanpublicIdentifierGeneratoridGenerator(){returnnewCustomIdGenerator();}// 自定义 SQL 注入器@BeanpublicMybatisPlusPropertiesCustomizerplusPropertiesCustomizer(){returnplusProperties->plusProperties.getGlobalConfig().setSqlInjector(newMySqlInjector());}}// 自定义 ID 生成器classCustomIdGeneratorimplementsIdentifierGenerator{@OverridepublicNumbernextId(Objectentity){// 返回自定义 IDreturnSnowFlakeUtil.nextId();}@OverridepublicStringnextUUID(Objectentity){returnUUID.randomUUID().toString().replaceAll("-","");}}