Sfoglia il codice sorgente

优化并行分页

zhou-hao 4 anni fa
parent
commit
c2a1d4e788

+ 5 - 0
hsweb-commons/hsweb-commons-api/src/main/java/org/hswebframework/web/api/crud/entity/QueryParamEntity.java

@@ -52,6 +52,11 @@ public class QueryParamEntity extends QueryParam {
     @Schema(description = "设置了此值后将不重复执行count查询总数")
     private Integer total;
 
+    @Getter
+    @Setter
+    @Schema(description = "是否进行并行分页")
+    private boolean parallelPager = false;
+
     @Override
     @Hidden
     public boolean isForUpdate() {

+ 9 - 0
hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/service/ReactiveCrudService.java

@@ -116,6 +116,15 @@ public interface ReactiveCrudService<E, K> {
                     .collectList()
                     .map(list -> PagerResult.of(query.getTotal(), list, query));
         }
+        //并行分页
+        if (query.isParallelPager()) {
+            return Mono
+                    .zip(
+                            createQuery().setParam(query).count(),
+                            createQuery().setParam(query.clone()).fetch().map(mapper).collectList(),
+                            (total, data) -> PagerResult.of(total, data, query)
+                    );
+        }
         return getRepository()
                 .createQuery()
                 .setParam(query)

+ 1 - 6
hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/web/reactive/ReactiveServiceQueryController.java

@@ -100,12 +100,7 @@ public interface ReactiveServiceQueryController<E, K> {
                     .collectList()
                     .map(list -> PagerResult.of(query.getTotal(), list, query));
         }
-
-        return Mono.zip(
-                getService().createQuery().setParam(query).count(),
-                getService().createQuery().setParam(query).fetch().collectList(),
-                (total, data) -> PagerResult.of(total, data, query)
-        );
+        return getService().queryPager(query);
 
     }