소스 검색

解决当分页大小为-1时,排序不生效问题。

yucheng 3 년 전
부모
커밋
5f2e60caa5

+ 22 - 1
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/basic/utils/QueryCriteriaHelper.java

@@ -1,7 +1,9 @@
 package com.persagy.dmp.basic.utils;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -10,6 +12,7 @@ import com.persagy.dmp.basic.model.QueryOperator;
 import com.persagy.dmp.common.model.entity.BaseEntity;
 
 import java.util.Iterator;
+import java.util.List;
 
 /**
  * 查询条件 助手
@@ -38,7 +41,8 @@ public class QueryCriteriaHelper {
         Page pageInfo = new Page();
         pageInfo.setCurrent(criteria.getPage());
         pageInfo.setSize(criteria.getSize());
-        pageInfo.setOrders(criteria.getOrders());
+        // 20210819 size<-1时,拦截器不执行page的配置,因此改为在wrapper中排序
+//        pageInfo.setOrders(criteria.getOrders());
         pageInfo.setSearchCount(!criteria.isWithoutCount());
         return pageInfo;
     }
@@ -52,6 +56,7 @@ public class QueryCriteriaHelper {
             return;
         }
         toWrapper(wrapper, criteria.getCriteria());
+        ensureOrders(wrapper, criteria.getOrders());
     }
 
     /**
@@ -170,4 +175,20 @@ public class QueryCriteriaHelper {
             }
         }
     }
+
+    /**
+     * 拼接排序条件
+     * @param wrapper
+     * @param orders
+     * @param <T>
+     */
+    public static <T extends BaseEntity> void ensureOrders(QueryWrapper<T> wrapper, List<OrderItem> orders) {
+        if(CollUtil.isEmpty(orders)) {
+            return;
+        }
+        for(OrderItem order:orders) {
+            String column = StrUtil.toUnderlineCase(order.getColumn());
+            wrapper.orderBy(true, order.isAsc(), column);
+        }
+    }
 }

+ 7 - 1
dmp-comp/dmp-mybatis/src/main/java/com/persagy/dmp/mybatis/config/MybatisPlusConfig.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.CommandLineRunner;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -25,6 +26,8 @@ public class MybatisPlusConfig implements CommandLineRunner {
 
     @Resource
     private ObjectMapper objectMapper;
+    @Value("${persagy.common.sql.limit:500}")
+    private long sqlLimit;
 
     @Override
     public void run(String... args) throws Exception {
@@ -38,7 +41,10 @@ public class MybatisPlusConfig implements CommandLineRunner {
      */
     @Bean
     public PaginationInterceptor paginationInterceptor() {
-        return new PaginationInterceptor();
+        PaginationInterceptor interceptor = new PaginationInterceptor();
+        // 设置每页查询记录上限,默认500(与mp相同)
+        interceptor.setLimit(sqlLimit);
+        return interceptor;
     }
 
     /**