add brackets option

This commit is contained in:
yulichang 2024-11-12 17:10:57 +08:00
parent 6abb21a5ee
commit 9173f6e5c8
2 changed files with 42 additions and 22 deletions

View File

@ -16,15 +16,19 @@ import java.util.Optional;
* @since 1.4.5 * @since 1.4.5
*/ */
@SuppressWarnings("DuplicatedCode") @SuppressWarnings("DuplicatedCode")
public class WrapperUtils { public class WrapperUtils implements StringPool {
public static <T> String buildSubSqlByWrapper(Class<T> clazz, MPJLambdaWrapper<T> wrapper, String alias) { public static <T> String buildSubSqlByWrapper(Class<T> clazz, MPJLambdaWrapper<T> wrapper, String alias) {
return String.format("%s AS %s", buildUnionSqlByWrapper(clazz, wrapper), alias); return String.format("%s AS %s", buildUnionSqlByWrapper(clazz, wrapper), alias);
} }
public static String buildUnionSqlByWrapper(Class<?> clazz, MPJLambdaWrapper<?> wrapper) { 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); 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; boolean hasWhere = false;
String entityWhere = getEntitySql(tableInfo, wrapper); String entityWhere = getEntitySql(tableInfo, wrapper);
if (StrUtils.isNotBlank(entityWhere)) { if (StrUtils.isNotBlank(entityWhere)) {
@ -39,19 +43,31 @@ public class WrapperUtils {
hasWhere = true; hasWhere = true;
} }
String sqlSegment = (wrapper.getSqlSegment() != null && StrUtils.isNotBlank(wrapper.getSqlSegment())) ? String sqlSegment = (wrapper.getSqlSegment() != null && StrUtils.isNotBlank(wrapper.getSqlSegment())) ?
((wrapper.isEmptyOfNormal() ? StringPool.EMPTY : (hasWhere ? " AND " : " WHERE ")) + wrapper.getSqlSegment()) : StringPool.EMPTY; ((wrapper.isEmptyOfNormal() ? EMPTY : (hasWhere ? " AND " : " WHERE ")) + wrapper.getSqlSegment()) : EMPTY;
String sqlComment = Optional.ofNullable(wrapper.getSqlComment()).orElse(EMPTY);
String sqlComment = Optional.ofNullable(wrapper.getSqlComment()).orElse(StringPool.EMPTY); StringBuilder sb = new StringBuilder(SPACE)
return String.format("( %s SELECT %s FROM %s %s %s %s %s %s %s )", .append(first)
first, .append(" SELECT ")
wrapper.getSqlSelect(), .append(wrapper.getSqlSelect())
wrapper.getTableName(tableInfo.getTableName()), .append(" FROM ")
wrapper.getAlias(), .append(wrapper.getTableName(tableInfo.getTableName()))
wrapper.getFrom(), .append(SPACE)
mainLogic, .append(wrapper.getAlias())
subLogic, .append(SPACE)
sqlSegment, .append(wrapper.getFrom())
sqlComment); .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 <T> String formatParam(MPJLambdaWrapper<T> wrapper, Object param) { private static <T> String formatParam(MPJLambdaWrapper<T> wrapper, Object param) {

View File

@ -259,6 +259,10 @@ public class MPJLambdaWrapper<T> extends JoinAbstractLambdaWrapper<T, MPJLambdaW
return typedThis; return typedThis;
} }
public <U> MPJLambdaWrapper<T> union(Class<U> clazz, Consumer<MPJLambdaWrapper<U>> consumer) {
return union(clazz, true, consumer);
}
/** /**
* union * union
* <p> * <p>
@ -267,12 +271,10 @@ public class MPJLambdaWrapper<T> extends JoinAbstractLambdaWrapper<T, MPJLambdaW
* @param clazz union语句的主表类型 * @param clazz union语句的主表类型
* @since 1.4.8 * @since 1.4.8
*/ */
public <U> MPJLambdaWrapper<T> union(Class<U> clazz, Consumer<MPJLambdaWrapper<U>> consumer) { public <U> MPJLambdaWrapper<T> union(Class<U> clazz, boolean brackets, Consumer<MPJLambdaWrapper<U>> consumer) {
MPJLambdaWrapper<U> unionWrapper = fromInstance(clazz); MPJLambdaWrapper<U> unionWrapper = fromInstance(clazz);
consumer.accept(unionWrapper); consumer.accept(unionWrapper);
String sb = " UNION " + WrapperUtils.buildUnionSqlByWrapper(clazz, unionWrapper); String sb = " UNION " + WrapperUtils.buildUnionSqlByWrapper(clazz, unionWrapper);
if (Objects.isNull(unionSql)) { if (Objects.isNull(unionSql)) {
unionSql = SharedString.emptyString(); unionSql = SharedString.emptyString();
} }
@ -296,6 +298,10 @@ public class MPJLambdaWrapper<T> extends JoinAbstractLambdaWrapper<T, MPJLambdaW
} }
} }
public <U> MPJLambdaWrapper<T> unionAll(Class<U> clazz, Consumer<MPJLambdaWrapper<U>> consumer) {
return unionAll(clazz, true, consumer);
}
/** /**
* union * union
* <p> * <p>
@ -304,12 +310,10 @@ public class MPJLambdaWrapper<T> extends JoinAbstractLambdaWrapper<T, MPJLambdaW
* @param clazz union语句的主表类型 * @param clazz union语句的主表类型
* @since 1.4.8 * @since 1.4.8
*/ */
public <U> MPJLambdaWrapper<T> unionAll(Class<U> clazz, Consumer<MPJLambdaWrapper<U>> consumer) { public <U> MPJLambdaWrapper<T> unionAll(Class<U> clazz, boolean brackets, Consumer<MPJLambdaWrapper<U>> consumer) {
MPJLambdaWrapper<U> unionWrapper = fromInstance(clazz); MPJLambdaWrapper<U> unionWrapper = fromInstance(clazz);
consumer.accept(unionWrapper); consumer.accept(unionWrapper);
String sb = " UNION ALL " + WrapperUtils.buildUnionSqlByWrapper(clazz, brackets, unionWrapper);
String sb = " UNION ALL " + WrapperUtils.buildUnionSqlByWrapper(clazz, unionWrapper);
if (Objects.isNull(unionSql)) { if (Objects.isNull(unionSql)) {
unionSql = SharedString.emptyString(); unionSql = SharedString.emptyString();
} }