package com.ruoyi.framework.config; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.ruoyi.common.handler.LocalDateTimeTypeHandler; import org.apache.ibatis.type.JdbcType; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // 1. 分页插件 - 指定 PostgreSQL 数据库类型 PaginationInnerInterceptor pagination = new PaginationInnerInterceptor(DbType.POSTGRE_SQL); pagination.setOptimizeJoin(true); // 优化 JOIN 查询 pagination.setMaxLimit(500L); // 设置最大单页限制 interceptor.addInnerInterceptor(pagination); // 2. 乐观锁插件 interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); // 3. 防止全表更新/删除插件 interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor()); return interceptor; } // 4. 添加全局类型处理器配置 @Bean public ConfigurationCustomizer configurationCustomizer() { return configuration -> { // 注册 LocalDateTime 类型处理器 configuration.getTypeHandlerRegistry().register(new LocalDateTimeTypeHandler()); // 设置空值处理策略 configuration.setJdbcTypeForNull(JdbcType.NULL); // 启用自动驼峰命名规则映射 configuration.setMapUnderscoreToCamelCase(true); }; } }