From 37e76da4d9cec94d902e0e4a8b0018c742957ae7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=B8=85?= <1474983351@qq.com> Date: Mon, 28 Oct 2024 16:27:41 +0800 Subject: [PATCH] =?UTF-8?q?fixed:=20=E6=97=A0=E6=B3=95=E4=BC=98=E5=8C=96?= =?UTF-8?q?=20COUNT=20=E6=9F=A5=E8=AF=A2=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=EF=BC=8C=E5=85=B3=E9=97=AD=EF=BC=9Ahttps://gitee.com/mybatis-f?= =?UTF-8?q?lex/mybatis-flex/issues/IAYAHL=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mybatisflex/core/util/MapperUtil.java | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/util/MapperUtil.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/util/MapperUtil.java index b10b3860..6212a313 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/util/MapperUtil.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/util/MapperUtil.java @@ -69,17 +69,20 @@ public class MapperUtil { .select(count().as("total")) .from(queryWrapper).as("t"); } - public static QueryWrapper rawCountQueryWrapper(QueryWrapper queryWrapper,List customCountColumns) { - return customCountColumns!=null?QueryWrapper.create() + + public static QueryWrapper rawCountQueryWrapper(QueryWrapper queryWrapper, List customCountColumns) { + return customCountColumns != null ? QueryWrapper.create() .select(customCountColumns) - .from(queryWrapper).as("t"):rawCountQueryWrapper(queryWrapper); + .from(queryWrapper).as("t") : rawCountQueryWrapper(queryWrapper); } + /** * 优化 COUNT 查询语句。 */ public static QueryWrapper optimizeCountQueryWrapper(QueryWrapper queryWrapper) { return optimizeCountQueryWrapper(queryWrapper, Collections.singletonList(count().as("total"))); } + /** * 优化 COUNT 查询语句。 */ @@ -88,10 +91,10 @@ public class MapperUtil { QueryWrapper clone = queryWrapper.clone(); List unions = CPI.getUnions(clone); - if(!CollectionUtil.isEmpty(unions)){ + if (!CollectionUtil.isEmpty(unions)) { List newUnions = new ArrayList<>(unions.size()); for (UnionWrapper union : unions) { - QueryWrapper unionQuery = optimizeCountQueryWrapper(union.getQueryWrapper().clone(),null); + QueryWrapper unionQuery = optimizeCountQueryWrapper(union.getQueryWrapper().clone(), null); UnionWrapper clone1 = union.clone(); clone1.setQueryWrapper(unionQuery); newUnions.add(clone1); @@ -108,17 +111,17 @@ public class MapperUtil { // 如果有 distinct、group by、having 等语句则不优化 // 这种一旦优化了就会造成 count 语句查询出来的值不对 if (hasDistinct(selectColumns) || hasGroupBy(groupByColumns) || havingCondition != null) { - return clone; + return rawCountQueryWrapper(clone); } // 判断能不能清除 join 语句 if (canClearJoins(clone)) { CPI.setJoins(clone, null); } // 将 select 里面的列换成 COUNT(*) AS `total` - if(customCountColumns!=null){ - if(hasUnion(clone)){ - return rawCountQueryWrapper(clone,customCountColumns); - }else { + if (customCountColumns != null) { + if (hasUnion(clone)) { + return rawCountQueryWrapper(clone, customCountColumns); + } else { CPI.setSelectColumns(clone, customCountColumns); } }