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
|
* @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) {
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user