فهرست منبع

新增处理单页条数限制 500 条

hubin 6 سال پیش
والد
کامیت
015e91e91c

+ 46 - 21
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/PaginationInterceptor.java

@@ -15,37 +15,51 @@
  */
 package com.baomidou.mybatisplus.extension.plugins;
 
-import com.baomidou.mybatisplus.annotation.DbType;
-import com.baomidou.mybatisplus.core.MybatisDefaultParameterHandler;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.parser.ISqlParser;
-import com.baomidou.mybatisplus.core.parser.SqlInfo;
-import com.baomidou.mybatisplus.core.toolkit.*;
-import com.baomidou.mybatisplus.extension.handlers.AbstractSqlParserHandler;
-import com.baomidou.mybatisplus.extension.plugins.pagination.DialectFactory;
-import com.baomidou.mybatisplus.extension.plugins.pagination.DialectModel;
-import com.baomidou.mybatisplus.extension.toolkit.JdbcUtils;
-import com.baomidou.mybatisplus.extension.toolkit.SqlParserUtils;
-import lombok.Setter;
-import lombok.experimental.Accessors;
+import static java.util.stream.Collectors.joining;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
 import org.apache.ibatis.executor.statement.StatementHandler;
 import org.apache.ibatis.mapping.BoundSql;
 import org.apache.ibatis.mapping.MappedStatement;
 import org.apache.ibatis.mapping.ParameterMapping;
 import org.apache.ibatis.mapping.SqlCommandType;
-import org.apache.ibatis.plugin.*;
+import org.apache.ibatis.plugin.Interceptor;
+import org.apache.ibatis.plugin.Intercepts;
+import org.apache.ibatis.plugin.Invocation;
+import org.apache.ibatis.plugin.Plugin;
+import org.apache.ibatis.plugin.Signature;
 import org.apache.ibatis.reflection.MetaObject;
 import org.apache.ibatis.reflection.SystemMetaObject;
 import org.apache.ibatis.scripting.defaults.DefaultParameterHandler;
 import org.apache.ibatis.session.Configuration;
 import org.apache.ibatis.session.RowBounds;
 
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.util.*;
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.core.MybatisDefaultParameterHandler;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.parser.ISqlParser;
+import com.baomidou.mybatisplus.core.parser.SqlInfo;
+import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
+import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
+import com.baomidou.mybatisplus.core.toolkit.PluginUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.handlers.AbstractSqlParserHandler;
+import com.baomidou.mybatisplus.extension.plugins.pagination.DialectFactory;
+import com.baomidou.mybatisplus.extension.plugins.pagination.DialectModel;
+import com.baomidou.mybatisplus.extension.toolkit.JdbcUtils;
+import com.baomidou.mybatisplus.extension.toolkit.SqlParserUtils;
 
-import static java.util.stream.Collectors.joining;
+import lombok.Setter;
+import lombok.experimental.Accessors;
 
 /**
  * 分页拦截器
@@ -66,6 +80,10 @@ public class PaginationInterceptor extends AbstractSqlParserHandler implements I
      * 溢出总页数,设置第一页
      */
     private boolean overflow = false;
+    /**
+     * 单页限制 500 条,小于 -1 不受限制
+     */
+    private long limit = 500L;
     /**
      * 方言类型
      */
@@ -103,7 +121,7 @@ public class PaginationInterceptor extends AbstractSqlParserHandler implements I
     /**
      * 拼接多个排序方法
      *
-     * @param columns ignore
+     * @param columns   ignore
      * @param orderWord ignore
      */
     private static String concatOrderBuilder(String[] columns, String orderWord) {
@@ -141,7 +159,7 @@ public class PaginationInterceptor extends AbstractSqlParserHandler implements I
         if (paramObj instanceof IPage) {
             page = (IPage<?>) paramObj;
         } else if (paramObj instanceof Map) {
-            for (Object arg : ((Map<?,?>) paramObj).values()) {
+            for (Object arg : ((Map<?, ?>) paramObj).values()) {
                 if (arg instanceof IPage) {
                     page = (IPage<?>) arg;
                     break;
@@ -156,6 +174,13 @@ public class PaginationInterceptor extends AbstractSqlParserHandler implements I
             return invocation.proceed();
         }
 
+        /*
+         * 处理单页条数限制
+         */
+        if (limit > 0 && limit < page.getSize()) {
+            page.setSize(limit);
+        }
+
         String originalSql = boundSql.getSql();
         Connection connection = (Connection) invocation.getArgs()[0];
         DbType dbType = StringUtils.isNotEmpty(dialectType) ? DbType.getDbType(dialectType)