|
@@ -15,37 +15,51 @@
|
|
*/
|
|
*/
|
|
package com.baomidou.mybatisplus.extension.plugins;
|
|
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.executor.statement.StatementHandler;
|
|
import org.apache.ibatis.mapping.BoundSql;
|
|
import org.apache.ibatis.mapping.BoundSql;
|
|
import org.apache.ibatis.mapping.MappedStatement;
|
|
import org.apache.ibatis.mapping.MappedStatement;
|
|
import org.apache.ibatis.mapping.ParameterMapping;
|
|
import org.apache.ibatis.mapping.ParameterMapping;
|
|
import org.apache.ibatis.mapping.SqlCommandType;
|
|
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.MetaObject;
|
|
import org.apache.ibatis.reflection.SystemMetaObject;
|
|
import org.apache.ibatis.reflection.SystemMetaObject;
|
|
import org.apache.ibatis.scripting.defaults.DefaultParameterHandler;
|
|
import org.apache.ibatis.scripting.defaults.DefaultParameterHandler;
|
|
import org.apache.ibatis.session.Configuration;
|
|
import org.apache.ibatis.session.Configuration;
|
|
import org.apache.ibatis.session.RowBounds;
|
|
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;
|
|
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
|
|
* @param orderWord ignore
|
|
*/
|
|
*/
|
|
private static String concatOrderBuilder(String[] columns, String orderWord) {
|
|
private static String concatOrderBuilder(String[] columns, String orderWord) {
|
|
@@ -141,7 +159,7 @@ public class PaginationInterceptor extends AbstractSqlParserHandler implements I
|
|
if (paramObj instanceof IPage) {
|
|
if (paramObj instanceof IPage) {
|
|
page = (IPage<?>) paramObj;
|
|
page = (IPage<?>) paramObj;
|
|
} else if (paramObj instanceof Map) {
|
|
} else if (paramObj instanceof Map) {
|
|
- for (Object arg : ((Map<?,?>) paramObj).values()) {
|
|
|
|
|
|
+ for (Object arg : ((Map<?, ?>) paramObj).values()) {
|
|
if (arg instanceof IPage) {
|
|
if (arg instanceof IPage) {
|
|
page = (IPage<?>) arg;
|
|
page = (IPage<?>) arg;
|
|
break;
|
|
break;
|
|
@@ -156,6 +174,13 @@ public class PaginationInterceptor extends AbstractSqlParserHandler implements I
|
|
return invocation.proceed();
|
|
return invocation.proceed();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * 处理单页条数限制
|
|
|
|
+ */
|
|
|
|
+ if (limit > 0 && limit < page.getSize()) {
|
|
|
|
+ page.setSize(limit);
|
|
|
|
+ }
|
|
|
|
+
|
|
String originalSql = boundSql.getSql();
|
|
String originalSql = boundSql.getSql();
|
|
Connection connection = (Connection) invocation.getArgs()[0];
|
|
Connection connection = (Connection) invocation.getArgs()[0];
|
|
DbType dbType = StringUtils.isNotEmpty(dialectType) ? DbType.getDbType(dialectType)
|
|
DbType dbType = StringUtils.isNotEmpty(dialectType) ? DbType.getDbType(dialectType)
|