From 55a90424fa1015aa31655475d4ceb2a35764ecd0 Mon Sep 17 00:00:00 2001 From: Suomm <1474983351@qq.com> Date: Wed, 5 Jul 2023 08:14:01 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=20selectCountByQ?= =?UTF-8?q?uery=20=E6=96=B9=E6=B3=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/mybatisflex/core/BaseMapper.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/BaseMapper.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/BaseMapper.java index 7f79d93f..c58ff870 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/BaseMapper.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/BaseMapper.java @@ -15,6 +15,7 @@ */ package com.mybatisflex.core; +import com.mybatisflex.core.constant.FuncName; import com.mybatisflex.core.exception.FlexExceptions; import com.mybatisflex.core.field.FieldQueryBuilder; import com.mybatisflex.core.mybatis.MappedStatementTypes; @@ -643,9 +644,15 @@ public interface BaseMapper { // 未设置 COUNT(...) 列,默认使用 COUNT(*) 查询 queryWrapper.select(count()); objects = selectObjectListByQuery(queryWrapper); - } else if (selectColumns.get(0) instanceof CountQueryColumn) { - // 自定义 COUNT 函数,COUNT 函数必须在第一列 - // 可以使用 COUNT(1)、COUNT(列名) 代替默认的 COUNT(*) + } else if (selectColumns.get(0) instanceof FunctionQueryColumn) { + // COUNT 函数必须在第一列 + if (!FuncName.COUNT.equalsIgnoreCase( + ((FunctionQueryColumn) selectColumns.get(0)).getFnName() + )) { + // 第一个查询列不是 COUNT 函数,使用 COUNT(*) 替换所有的查询列 + queryWrapper.select(count()); + } + // 第一个查询列是 COUNT 函数,可以使用 COUNT(1)、COUNT(列名) 代替默认的 COUNT(*) objects = selectObjectListByQuery(queryWrapper); } else { // 查询列中的第一列不是 COUNT 函数 @@ -748,6 +755,7 @@ public interface BaseMapper { * @param queryWrapper 查询条件 * @return page 数据 */ + @SuppressWarnings("unchecked") default Page paginate(Page page, QueryWrapper queryWrapper, Consumer>... consumers) { return paginateAs(page, queryWrapper, null, consumers); }