MyBatis Plus 中常用的插件列表

一、MyBatis Plus 官方插件列表

  1. 核心插件(InnerInterceptor 实现类)

    (1)分页插件

    java 复制代码
    PaginationInnerInterceptor

    (2)乐观锁插件

    java 复制代码
    OptimisticLockerInnerInterceptor

    (3)防止全表更新与删除插件

    java 复制代码
    BlockAttackInnerInterceptor

    (4)SQL 性能规范插件

    java 复制代码
    IllegalSQLInnerInterceptor

    (5)动态表名插件

    java 复制代码
    DynamicTableNameInnerInterceptor

    (6)多租户插件

    java 复制代码
    TenantLineInnerInterceptor

    (7)数据权限插件

    java 复制代码
    DataPermissionInterceptor  // 已废弃,推荐使用 TenantLineInnerInterceptor 或自定义

    (8)字段加解密插件

    java 复制代码
    EncryptorInnerInterceptor  // v3.5.0+ 版本提供

    (9)关联查询插件(已废弃)

    java 复制代码
    innerInterceptor(new JsqlParserCountOptimize())
  2. 其他重要插件和组件

    (10)SQL 注入器(不是插件,但功能类似)

    java 复制代码
    ISqlInjector
    • LogicSqlInjector - 逻辑删除注入器
    • DefaultSqlInjector - 默认注入器
    • 可自定义实现,用于注入自定义方法

    (11)主键生成器

    java 复制代码
    IdentifierGenerator
    • DefaultIdentifierGenerator - 默认(雪花算法)
    • CustomIdGenerator - 自定义
    • UUID - UUID 生成器

    (12)ID 类型处理器

    java 复制代码
    IdType

    控制主键生成策略

    (13)元对象处理器

    java 复制代码
    MetaObjectHandler

    用于自动填充字段(如 create_time, update_time)

    (14)性能分析插件(已废弃,推荐使用 p6spy)

    java 复制代码
    PerformanceInterceptor  // 已废弃

完整配置示例(包含所有可用插件)

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("-", "");
    }
}
相关推荐
Joy T5 小时前
Agent 确定性上下文设计:从 Prompt 参数注入到能力分层
java·开发语言·微服务·架构·prompt·agent context
m0_587383008 小时前
广州 24 小时自助健身房解决方案技术实现与实战指南
java·spring·小程序·架构·需求分析
·云扬·8 小时前
Prompt 工程与安全:从 System 设计到注入防御
java·人工智能·安全·ai·prompt
代码不停9 小时前
自动化测试(java)
java·开发语言·selenium·自动化
鬼手点金11 小时前
opencode-rules 插件
java·开发语言·前端·人工智能·chrome·git·github
paopaokaka_luck12 小时前
滑雪场管理系统(AI智能助手流式对话,ECharts 运营数据分析、教练、雪具与场地一体化预约,钱包支付退款、订单核销与服务评价)
java·人工智能·spring boot·网络协议·数据分析·echarts
Wang's Blog12 小时前
Java 项目实战: 交友项目 - Dubbo 的内部结构与一次调用的完整链路
java·dubbo
Wang's Blog12 小时前
Java 项目实战: 交友项目 - Dubbo 入门引导
java·dubbo·交友
蜗牛互联网13 小时前
Python Agent工具调用的白名单、参数校验与审批门禁
java·服务器·前端·人工智能·后端·python
SL_staff13 小时前
当规则引擎开始‘懂业务’:JVS-Rules金融风控四大原生能力拆解
java·python·全栈