|
@@ -15,16 +15,45 @@
|
|
|
*/
|
|
|
package com.baomidou.mybatisplus.extension.plugins.inner;
|
|
|
|
|
|
+import java.sql.SQLException;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Optional;
|
|
|
+import java.util.Properties;
|
|
|
+import java.util.concurrent.ConcurrentHashMap;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+import org.apache.ibatis.cache.CacheKey;
|
|
|
+import org.apache.ibatis.executor.Executor;
|
|
|
+import org.apache.ibatis.logging.Log;
|
|
|
+import org.apache.ibatis.logging.LogFactory;
|
|
|
+import org.apache.ibatis.mapping.BoundSql;
|
|
|
+import org.apache.ibatis.mapping.MappedStatement;
|
|
|
+import org.apache.ibatis.mapping.ParameterMapping;
|
|
|
+import org.apache.ibatis.mapping.ResultMap;
|
|
|
+import org.apache.ibatis.session.Configuration;
|
|
|
+import org.apache.ibatis.session.ResultHandler;
|
|
|
+import org.apache.ibatis.session.RowBounds;
|
|
|
+
|
|
|
import com.baomidou.mybatisplus.annotation.DbType;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.core.metadata.OrderItem;
|
|
|
-import com.baomidou.mybatisplus.core.toolkit.*;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.ClassUtils;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Constants;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.ParameterUtils;
|
|
|
+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.plugins.handler.PageResultHandler;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.DialectFactory;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.DialectModel;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.dialects.IDialect;
|
|
|
import com.baomidou.mybatisplus.extension.toolkit.JdbcUtils;
|
|
|
import com.baomidou.mybatisplus.extension.toolkit.PropertyMapper;
|
|
|
import com.baomidou.mybatisplus.extension.toolkit.SqlParserUtils;
|
|
|
+
|
|
|
import lombok.Data;
|
|
|
import lombok.NoArgsConstructor;
|
|
|
import net.sf.jsqlparser.JSQLParserException;
|
|
@@ -33,23 +62,19 @@ import net.sf.jsqlparser.expression.Expression;
|
|
|
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
|
|
|
import net.sf.jsqlparser.schema.Column;
|
|
|
import net.sf.jsqlparser.schema.Table;
|
|
|
-import net.sf.jsqlparser.statement.select.*;
|
|
|
-import org.apache.ibatis.cache.CacheKey;
|
|
|
-import org.apache.ibatis.executor.Executor;
|
|
|
-import org.apache.ibatis.logging.Log;
|
|
|
-import org.apache.ibatis.logging.LogFactory;
|
|
|
-import org.apache.ibatis.mapping.BoundSql;
|
|
|
-import org.apache.ibatis.mapping.MappedStatement;
|
|
|
-import org.apache.ibatis.mapping.ParameterMapping;
|
|
|
-import org.apache.ibatis.mapping.ResultMap;
|
|
|
-import org.apache.ibatis.session.Configuration;
|
|
|
-import org.apache.ibatis.session.ResultHandler;
|
|
|
-import org.apache.ibatis.session.RowBounds;
|
|
|
-
|
|
|
-import java.sql.SQLException;
|
|
|
-import java.util.*;
|
|
|
-import java.util.concurrent.ConcurrentHashMap;
|
|
|
-import java.util.stream.Collectors;
|
|
|
+import net.sf.jsqlparser.statement.select.Distinct;
|
|
|
+import net.sf.jsqlparser.statement.select.FromItem;
|
|
|
+import net.sf.jsqlparser.statement.select.GroupByElement;
|
|
|
+import net.sf.jsqlparser.statement.select.Join;
|
|
|
+import net.sf.jsqlparser.statement.select.OrderByElement;
|
|
|
+import net.sf.jsqlparser.statement.select.PlainSelect;
|
|
|
+import net.sf.jsqlparser.statement.select.Select;
|
|
|
+import net.sf.jsqlparser.statement.select.SelectBody;
|
|
|
+import net.sf.jsqlparser.statement.select.SelectExpressionItem;
|
|
|
+import net.sf.jsqlparser.statement.select.SelectItem;
|
|
|
+import net.sf.jsqlparser.statement.select.SetOperationList;
|
|
|
+import net.sf.jsqlparser.statement.select.SubSelect;
|
|
|
+import net.sf.jsqlparser.statement.select.WithItem;
|
|
|
|
|
|
/**
|
|
|
* 分页拦截器
|
|
@@ -134,6 +159,10 @@ public class PaginationInnerInterceptor implements InnerInterceptor {
|
|
|
CacheKey cacheKey = executor.createCacheKey(countMs, parameter, rowBounds, countSql);
|
|
|
List<Object> result = executor.query(countMs, parameter, rowBounds, resultHandler, cacheKey, countSql);
|
|
|
long total = 0;
|
|
|
+ if (resultHandler instanceof PageResultHandler) {
|
|
|
+ // FIX https://github.com/baomidou/mybatis-plus/issues/4426
|
|
|
+ total = ((PageResultHandler) resultHandler).getCount();
|
|
|
+ }
|
|
|
if (CollectionUtils.isNotEmpty(result)) {
|
|
|
// 个别数据库 count 没数据不会返回 0
|
|
|
Object o = result.get(0);
|
|
@@ -273,11 +302,8 @@ public class PaginationInnerInterceptor implements InnerInterceptor {
|
|
|
List<OrderByElement> orderBy = plainSelect.getOrderByElements();
|
|
|
|
|
|
if (CollectionUtils.isNotEmpty(orderBy)) {
|
|
|
- boolean canClean = true;
|
|
|
- if (groupBy != null) {
|
|
|
- // 包含groupBy 不去除orderBy
|
|
|
- canClean = false;
|
|
|
- }
|
|
|
+ boolean canClean = groupBy == null;
|
|
|
+ // 包含groupBy 不去除orderBy
|
|
|
if (canClean) {
|
|
|
for (OrderByElement order : orderBy) {
|
|
|
// order by 里带参数,不去除order by
|