mirror of
https://gitee.com/best_handsome/mybatis-plus-join
synced 2025-07-11 00:02:22 +08:00
add brackets option
This commit is contained in:
parent
6abb21a5ee
commit
9173f6e5c8
@ -16,15 +16,19 @@ import java.util.Optional;
|
||||
* @since 1.4.5
|
||||
*/
|
||||
@SuppressWarnings("DuplicatedCode")
|
||||
public class WrapperUtils {
|
||||
public class WrapperUtils implements StringPool {
|
||||
|
||||
public static <T> String buildSubSqlByWrapper(Class<T> clazz, MPJLambdaWrapper<T> 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 <T> String formatParam(MPJLambdaWrapper<T> wrapper, Object param) {
|
||||
|
@ -259,6 +259,10 @@ public class MPJLambdaWrapper<T> extends JoinAbstractLambdaWrapper<T, MPJLambdaW
|
||||
return typedThis;
|
||||
}
|
||||
|
||||
public <U> MPJLambdaWrapper<T> union(Class<U> clazz, Consumer<MPJLambdaWrapper<U>> consumer) {
|
||||
return union(clazz, true, consumer);
|
||||
}
|
||||
|
||||
/**
|
||||
* union
|
||||
* <p>
|
||||
@ -267,12 +271,10 @@ public class MPJLambdaWrapper<T> extends JoinAbstractLambdaWrapper<T, MPJLambdaW
|
||||
* @param clazz union语句的主表类型
|
||||
* @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);
|
||||
consumer.accept(unionWrapper);
|
||||
|
||||
String sb = " UNION " + WrapperUtils.buildUnionSqlByWrapper(clazz, unionWrapper);
|
||||
|
||||
if (Objects.isNull(unionSql)) {
|
||||
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
|
||||
* <p>
|
||||
@ -304,12 +310,10 @@ public class MPJLambdaWrapper<T> extends JoinAbstractLambdaWrapper<T, MPJLambdaW
|
||||
* @param clazz union语句的主表类型
|
||||
* @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);
|
||||
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();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user