From 9173f6e5c8da6e6b5f0c6a9b9c48fed516b6f80d Mon Sep 17 00:00:00 2001 From: yulichang <570810310@qq.com> Date: Tue, 12 Nov 2024 17:10:57 +0800 Subject: [PATCH] add brackets option --- .../yulichang/toolkit/WrapperUtils.java | 46 +++++++++++++------ .../yulichang/wrapper/MPJLambdaWrapper.java | 18 +++++--- 2 files changed, 42 insertions(+), 22 deletions(-) diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/WrapperUtils.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/WrapperUtils.java index d963111..8f4da91 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/WrapperUtils.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/WrapperUtils.java @@ -16,15 +16,19 @@ import java.util.Optional; * @since 1.4.5 */ @SuppressWarnings("DuplicatedCode") -public class WrapperUtils { +public class WrapperUtils implements StringPool { public static String buildSubSqlByWrapper(Class clazz, MPJLambdaWrapper wrapper, String alias) { return String.format("%s AS %s", buildUnionSqlByWrapper(clazz, wrapper), alias); } public static String buildUnionSqlByWrapper(Class clazz, MPJLambdaWrapper wrapper) { + return buildUnionSqlByWrapper(clazz, true, wrapper); + } + + public static String buildUnionSqlByWrapper(Class clazz, boolean brackets, MPJLambdaWrapper wrapper) { TableInfo tableInfo = TableHelper.getAssert(clazz); - String first = Optional.ofNullable(wrapper.getSqlFirst()).orElse(StringPool.EMPTY); + String first = Optional.ofNullable(wrapper.getSqlFirst()).orElse(EMPTY); boolean hasWhere = false; String entityWhere = getEntitySql(tableInfo, wrapper); if (StrUtils.isNotBlank(entityWhere)) { @@ -39,19 +43,31 @@ public class WrapperUtils { hasWhere = true; } String sqlSegment = (wrapper.getSqlSegment() != null && StrUtils.isNotBlank(wrapper.getSqlSegment())) ? - ((wrapper.isEmptyOfNormal() ? StringPool.EMPTY : (hasWhere ? " AND " : " WHERE ")) + wrapper.getSqlSegment()) : StringPool.EMPTY; - - String sqlComment = Optional.ofNullable(wrapper.getSqlComment()).orElse(StringPool.EMPTY); - return String.format("( %s SELECT %s FROM %s %s %s %s %s %s %s )", - first, - wrapper.getSqlSelect(), - wrapper.getTableName(tableInfo.getTableName()), - wrapper.getAlias(), - wrapper.getFrom(), - mainLogic, - subLogic, - sqlSegment, - sqlComment); + ((wrapper.isEmptyOfNormal() ? EMPTY : (hasWhere ? " AND " : " WHERE ")) + wrapper.getSqlSegment()) : EMPTY; + String sqlComment = Optional.ofNullable(wrapper.getSqlComment()).orElse(EMPTY); + StringBuilder sb = new StringBuilder(SPACE) + .append(first) + .append(" SELECT ") + .append(wrapper.getSqlSelect()) + .append(" FROM ") + .append(wrapper.getTableName(tableInfo.getTableName())) + .append(SPACE) + .append(wrapper.getAlias()) + .append(SPACE) + .append(wrapper.getFrom()) + .append(SPACE) + .append(mainLogic) + .append(SPACE) + .append(subLogic) + .append(SPACE) + .append(sqlSegment) + .append(SPACE) + .append(sqlComment) + .append(SPACE); + if (brackets) { + sb.insert(0, "(").append(")"); + } + return sb.toString(); } private static String formatParam(MPJLambdaWrapper wrapper, Object param) { diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJLambdaWrapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJLambdaWrapper.java index 7867483..f5fac0f 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJLambdaWrapper.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJLambdaWrapper.java @@ -259,6 +259,10 @@ public class MPJLambdaWrapper extends JoinAbstractLambdaWrapper MPJLambdaWrapper union(Class clazz, Consumer> consumer) { + return union(clazz, true, consumer); + } + /** * union *

@@ -267,12 +271,10 @@ public class MPJLambdaWrapper extends JoinAbstractLambdaWrapper MPJLambdaWrapper union(Class clazz, Consumer> consumer) { + public MPJLambdaWrapper union(Class clazz, boolean brackets, Consumer> consumer) { MPJLambdaWrapper unionWrapper = fromInstance(clazz); consumer.accept(unionWrapper); - String sb = " UNION " + WrapperUtils.buildUnionSqlByWrapper(clazz, unionWrapper); - if (Objects.isNull(unionSql)) { unionSql = SharedString.emptyString(); } @@ -296,6 +298,10 @@ public class MPJLambdaWrapper extends JoinAbstractLambdaWrapper MPJLambdaWrapper unionAll(Class clazz, Consumer> consumer) { + return unionAll(clazz, true, consumer); + } + /** * union *

@@ -304,12 +310,10 @@ public class MPJLambdaWrapper extends JoinAbstractLambdaWrapper MPJLambdaWrapper unionAll(Class clazz, Consumer> consumer) { + public MPJLambdaWrapper unionAll(Class clazz, boolean brackets, Consumer> consumer) { MPJLambdaWrapper unionWrapper = fromInstance(clazz); consumer.accept(unionWrapper); - - String sb = " UNION ALL " + WrapperUtils.buildUnionSqlByWrapper(clazz, unionWrapper); - + String sb = " UNION ALL " + WrapperUtils.buildUnionSqlByWrapper(clazz, brackets, unionWrapper); if (Objects.isNull(unionSql)) { unionSql = SharedString.emptyString(); }