package com.ruoyi.framework.config; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ParameterUtils; 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.interceptor.DataScopeSqlInterceptor; import org.apache.ibatis.executor.Executor; import org.apache.ibatis.mapping.BoundSql; import org.apache.ibatis.mapping.MappedStatement; import org.apache.ibatis.session.ResultHandler; import org.apache.ibatis.session.RowBounds; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.annotation.EnableTransactionManagement; /** * MyBatis Plus config. */ @EnableTransactionManagement(proxyTargetClass = true) @Configuration public class MybatisPlusConfig { @Autowired private DataScopeSqlInterceptor dataScopeSqlInterceptor; @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // Rewrite the original SQL before pagination generates the count query. interceptor.addInnerInterceptor(dataScopeSqlInterceptor); interceptor.addInnerInterceptor(paginationInnerInterceptor()); interceptor.addInnerInterceptor(optimisticLockerInnerInterceptor()); interceptor.addInnerInterceptor(blockAttackInnerInterceptor()); return interceptor; } /** * Pagination interceptor. */ public PaginationInnerInterceptor paginationInnerInterceptor() { PaginationInnerInterceptor interceptor = new PaginationInnerInterceptor(DbType.MYSQL) { @Override public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) { IPage page = ParameterUtils.findPage(parameter).orElse(null); if (page != null && page.getSize() <= 0) { return; } super.beforeQuery(executor, ms, parameter, rowBounds, resultHandler, boundSql); } }; interceptor.setMaxLimit(1000L); return interceptor; } /** * Optimistic lock interceptor. */ public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor() { return new OptimisticLockerInnerInterceptor(); } /** * Block full-table update and delete. */ public BlockAttackInnerInterceptor blockAttackInnerInterceptor() { return new BlockAttackInnerInterceptor(); } }