package com.ruoyi.framework.config;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.ruoyi.common.core.mybatisplus.methods.InsertAll;
import com.ruoyi.framework.handler.CreateAndUpdateMetaObjectHandler;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import java.util.List;
/**
* mybatis-plusé…置类(下方注释有æ’件介ç»)
*
* @author Lion Li
*/
@EnableTransactionManagement(proxyTargetClass = true)
@Configuration
@MapperScan("${mybatis-plus.mapperPackage}")
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 分页æ’ä»¶
interceptor.addInnerInterceptor(paginationInnerInterceptor());
// ä¹è§‚锿’ä»¶
interceptor.addInnerInterceptor(optimisticLockerInnerInterceptor());
return interceptor;
}
/**
* 分页æ’件,自动识别数æ®åº“类型
*/
public PaginationInnerInterceptor paginationInnerInterceptor() {
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
// 设置最大å•页é™åˆ¶æ•°é‡ï¼Œé»˜è®¤ 500 æ¡ï¼Œ-1 ä¸å—é™åˆ¶
paginationInnerInterceptor.setMaxLimit(-1L);
// 分页åˆç†åŒ–
paginationInnerInterceptor.setOverflow(true);
return paginationInnerInterceptor;
}
/**
* ä¹è§‚锿’ä»¶
*/
public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor() {
return new OptimisticLockerInnerInterceptor();
}
/**
* å…ƒå¯¹è±¡å—æ®µå¡«å……控制器
*/
@Bean
public MetaObjectHandler metaObjectHandler() {
return new CreateAndUpdateMetaObjectHandler();
}
/**
* sql注入器é…ç½®
*/
@Bean
public ISqlInjector sqlInjector() {
return new DefaultSqlInjector() {
@Override
public List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) {
List<AbstractMethod> methodList = super.getMethodList(mapperClass, tableInfo);
methodList.add(new InsertAll());
return methodList;
}
};
}
/**
* PaginationInnerInterceptor 分页æ’件,自动识别数æ®åº“类型
* https://baomidou.com/guide/interceptor-pagination.html
* OptimisticLockerInnerInterceptor ä¹è§‚锿’ä»¶
* https://baomidou.com/guide/interceptor-optimistic-locker.html
* MetaObjectHandler å…ƒå¯¹è±¡å—æ®µå¡«å……控制器
* https://baomidou.com/guide/auto-fill-metainfo.html
* ISqlInjector sql注入器
* https://baomidou.com/guide/sql-injector.html
* BlockAttackInnerInterceptor å¦‚æžœæ˜¯å¯¹å…¨è¡¨çš„åˆ é™¤æˆ–æ›´æ–°æ“作,就会终æ¢è¯¥æ“作
* https://baomidou.com/guide/interceptor-block-attack.html
* IllegalSQLInnerInterceptor sql性能规范æ’ä»¶(垃圾SQL拦截)
* IdentifierGenerator 自定义主键ç–ç•¥
* https://baomidou.com/guide/id-generator.html
* TenantLineInnerInterceptor 多租户æ’ä»¶
* https://baomidou.com/guide/interceptor-tenant-line.html
* DynamicTableNameInnerInterceptor 动æ€è¡¨åæ’ä»¶
* https://baomidou.com/guide/interceptor-dynamic-table-name.html
*/
}