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);
|
};
|
}
|
}
|