diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/JoinAbstractLambdaWrapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/JoinAbstractLambdaWrapper.java index 7df36fc..6253bfb 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/JoinAbstractLambdaWrapper.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/JoinAbstractLambdaWrapper.java @@ -217,18 +217,26 @@ public abstract class JoinAbstractLambdaWrapper String columnToString(Integer index, String alias, X column, boolean isJoin, PrefixEnum prefixEnum) { - return columnToString(index, alias, (SFunction) column, isJoin, prefixEnum); + protected String columnToString(Integer index, String alias, X column, boolean isJoin, PrefixEnum prefixEnum, boolean orderBy) { + return columnToString(index, alias, (SFunction) column, isJoin, prefixEnum, orderBy); } @Override @SafeVarargs - protected final String columnsToString(Integer index, PrefixEnum prefixEnum, String alias, X... columns) { - return Arrays.stream(columns).map(i -> columnToString(index, alias, (SFunction) i, false, prefixEnum)).collect(joining(StringPool.COMMA)); + protected final String columnsToString(Integer index, PrefixEnum prefixEnum, String alias,boolean orderBy, X... columns) { + return Arrays.stream(columns).map(i -> + columnToString(index, alias, (SFunction) i, false, prefixEnum, orderBy)) + .collect(joining(StringPool.COMMA)); } - protected String columnToString(Integer index, String alias, SFunction column, boolean isJoin, PrefixEnum prefixEnum) { + protected String columnToString(Integer index, String alias, SFunction column, boolean isJoin, PrefixEnum prefixEnum, boolean orderBy) { Class entityClass = LambdaUtils.getEntityClass(column); + if (orderBy) { + TableInfo info = TableHelper.get(entityClass); + if (Objects.isNull(info)) { + return LambdaUtils.getName(column); + } + } return (alias == null ? getDefault(index, entityClass, isJoin, prefixEnum) : alias) + StringPool.DOT + getCache(column).getColumn(); } diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/JoinAbstractWrapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/JoinAbstractWrapper.java index 8f27151..7e1ace6 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/JoinAbstractWrapper.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/JoinAbstractWrapper.java @@ -289,13 +289,13 @@ public abstract class JoinAbstractWrapper Children between(boolean condition, String alias, SFunction column, Object val1, Object val2) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), BETWEEN, + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column, false), BETWEEN, () -> formatParam(null, val1), AND, () -> formatParam(null, val2))); } @Override public Children notBetween(boolean condition, String alias, SFunction column, Object val1, Object val2) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), NOT_BETWEEN, + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column, false), NOT_BETWEEN, () -> formatParam(null, val1), AND, () -> formatParam(null, val2))); } @@ -374,74 +374,74 @@ public abstract class JoinAbstractWrapper Children isNull(boolean condition, String alias, SFunction column) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), IS_NULL)); + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column, false), IS_NULL)); } @Override public Children isNotNull(boolean condition, String alias, SFunction column) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), IS_NOT_NULL)); + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column, false), IS_NOT_NULL)); } @Override public Children in(boolean condition, String alias, SFunction column, Collection coll) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), IN, inExpression(coll))); + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column, false), IN, inExpression(coll))); } @Override public Children in(boolean condition, String alias, SFunction column, Object... values) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), IN, inExpression(values))); + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column, false), IN, inExpression(values))); } @Override public Children notIn(boolean condition, String alias, SFunction column, Collection coll) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), NOT_IN, inExpression(coll))); + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column, false), NOT_IN, inExpression(coll))); } @Override public Children notIn(boolean condition, String alias, SFunction column, Object... values) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), NOT_IN, inExpression(values))); + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column, false), NOT_IN, inExpression(values))); } @Override public Children inSql(boolean condition, String alias, SFunction column, String inValue) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), IN, + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column, false), IN, () -> String.format("(%s)", inValue))); } @Override public Children notInSql(boolean condition, String alias, SFunction column, String inValue) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), NOT_IN, + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column, false), NOT_IN, () -> String.format("(%s)", inValue))); } @Override public Children gtSql(boolean condition, String alias, SFunction column, String inValue) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), GT, + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column, false), GT, () -> String.format("(%s)", inValue))); } @Override public Children geSql(boolean condition, String alias, SFunction column, String inValue) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), GE, + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column, false), GE, () -> String.format("(%s)", inValue))); } @Override public Children ltSql(boolean condition, String alias, SFunction column, String inValue) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), LT, + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column, false), LT, () -> String.format("(%s)", inValue))); } @Override public Children leSql(boolean condition, String alias, SFunction column, String inValue) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), LE, + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column, false), LE, () -> String.format("(%s)", inValue))); } @Override public Children eqSql(boolean condition, String alias, SFunction column, String inValue) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), EQ, + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column, false), EQ, () -> String.format("(%s)", inValue))); } @@ -449,7 +449,7 @@ public abstract class JoinAbstractWrapper Children groupBy(boolean condition, String alias, List> columns) { return maybeDo(condition, () -> { if (CollectionUtils.isNotEmpty(columns)) { - final String finalOne = columnsToString(index, isOn ? PrefixEnum.ON_FIRST : PrefixEnum.CD_FIRST, alias, columns); + final String finalOne = columnsToString(index, isOn ? PrefixEnum.ON_FIRST : PrefixEnum.CD_FIRST, alias, false, columns); appendSqlSegments(GROUP_BY, () -> finalOne); } }); @@ -477,9 +477,9 @@ public abstract class JoinAbstractWrapper Children groupBy(boolean condition, String alias, SFunction column, SFunction... columns) { return maybeDo(condition, () -> { - String one = columnToString(index, alias, column, false, isOn ? PrefixEnum.ON_FIRST : PrefixEnum.CD_FIRST); + String one = columnToString(index, alias, column, false, isOn ? PrefixEnum.ON_FIRST : PrefixEnum.CD_FIRST, false); if (ArrayUtils.isNotEmpty(columns)) { - one += (StringPool.COMMA + columnsToString(index, isOn ? PrefixEnum.ON_FIRST : PrefixEnum.CD_FIRST, alias, columns)); + one += (StringPool.COMMA + columnsToString(index, isOn ? PrefixEnum.ON_FIRST : PrefixEnum.CD_FIRST, alias, false, columns)); } final String finalOne = one; appendSqlSegments(GROUP_BY, () -> finalOne); @@ -491,7 +491,7 @@ public abstract class JoinAbstractWrapper { if (CollectionUtils.isNotEmpty(columns)) { columns.forEach(c -> appendSqlSegments(ORDER_BY, - columnToSqlSegment(index, alias, columnSqlInjectFilter(c)), ASC)); + columnToSqlSegment(index, alias, columnSqlInjectFilter(c), true), ASC)); } }); } @@ -534,7 +534,7 @@ public abstract class JoinAbstractWrapper { if (CollectionUtils.isNotEmpty(columns)) { columns.forEach(c -> appendSqlSegments(ORDER_BY, - columnToSqlSegment(index, alias, columnSqlInjectFilter(c)), DESC)); + columnToSqlSegment(index, alias, columnSqlInjectFilter(c), true), DESC)); } }); } @@ -577,10 +577,10 @@ public abstract class JoinAbstractWrapper Children orderBy(boolean condition, boolean isAsc, String alias, SFunction column, SFunction... columns) { return maybeDo(condition, () -> { final SqlKeyword mode = isAsc ? ASC : DESC; - appendSqlSegments(ORDER_BY, columnToSqlSegment(index, alias, column), mode); + appendSqlSegments(ORDER_BY, columnToSqlSegment(index, alias, column, true), mode); if (ArrayUtils.isNotEmpty(columns)) { Arrays.stream(columns).forEach(c -> appendSqlSegments(ORDER_BY, - columnToSqlSegment(index, alias, columnSqlInjectFilter(c)), mode)); + columnToSqlSegment(index, alias, columnSqlInjectFilter(c), true), mode)); } }); } @@ -632,7 +632,7 @@ public abstract class JoinAbstractWrapper拼接 LIKE 以及 值

*/ protected Children likeValue(boolean condition, SqlKeyword keyword, String alias, SFunction column, Object val, SqlLike sqlLike) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), keyword, + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column, false), keyword, () -> formatParam(null, SqlUtils.concatLike(val, sqlLike)))); } @@ -650,7 +650,7 @@ public abstract class JoinAbstractWrapper Children addCondition(boolean condition, String alias, SFunction column, SqlKeyword sqlKeyword, Object val) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), sqlKeyword, + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column, false), sqlKeyword, () -> formatParam(null, val))); } @@ -658,7 +658,7 @@ public abstract class JoinAbstractWrapper val) { Class c = LambdaUtils.getEntityClass(column); Class v = LambdaUtils.getEntityClass(val); - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), sqlKeyword, + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column, false), sqlKeyword, isOn ? columnToSqlSegmentS(index, rightAlias, val, v == c && v == joinClass) : columnToSqlSegmentS(index, rightAlias, val, v == c) )); @@ -844,8 +844,8 @@ public abstract class JoinAbstractWrapper ISqlSegment columnToSqlSegment(Integer index, String alias, SFunction column) { - return () -> columnToString(index, alias, column, false, isOn ? PrefixEnum.ON_FIRST : PrefixEnum.CD_FIRST); + protected final ISqlSegment columnToSqlSegment(Integer index, String alias, SFunction column, boolean orderBy) { + return () -> columnToString(index, alias, column, false, isOn ? PrefixEnum.ON_FIRST : PrefixEnum.CD_FIRST, orderBy); } protected final ISqlSegment columnToSqlSegmentS(Integer index, String alias, SFunction column, boolean isJoin) { @@ -855,7 +855,7 @@ public abstract class JoinAbstractWrapper columnToString(index, alias, column, isJoin, prefixEnum); + return () -> columnToString(index, alias, column, isJoin, prefixEnum, false); } protected final ISqlSegment columnToSqlSegment(String column) { @@ -865,7 +865,7 @@ public abstract class JoinAbstractWrapper String columnToString(Integer index, String alias, X column, boolean isJoin, PrefixEnum prefixEnum) { + protected String columnToString(Integer index, String alias, X column, boolean isJoin, PrefixEnum prefixEnum, boolean orderBy) { return (String) column; } @@ -890,10 +890,12 @@ public abstract class JoinAbstractWrapper String columnsToString(Integer index, PrefixEnum prefixEnum, String alias, X... columns); + abstract String columnsToString(Integer index, PrefixEnum prefixEnum, String alias, boolean orderBy, X... columns); - public String columnsToString(Integer index, PrefixEnum prefixEnum, String alias, List columns) { - return columns.stream().map(i -> columnToString(index, alias, (SFunction) i, false, prefixEnum)).collect(joining(StringPool.COMMA)); + public String columnsToString(Integer index, PrefixEnum prefixEnum, String alias, boolean orderBy, List columns) { + return columns.stream().map(i -> + columnToString(index, alias, (SFunction) i, false, prefixEnum, orderBy)) + .collect(joining(StringPool.COMMA)); } @Override diff --git a/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/config/MybatisPlusConfig.java b/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/config/MybatisPlusConfig.java index f2a9b23..65ce1d5 100644 --- a/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/config/MybatisPlusConfig.java +++ b/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/config/MybatisPlusConfig.java @@ -56,7 +56,7 @@ public class MybatisPlusConfig { @Override public boolean ignoreTable(String tableName) { - return !"user_tenant".equals(tableName); + return !tableName.startsWith("user_tenant"); } })); interceptor.addInnerInterceptor(page); diff --git a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/m/OrderByTest.java b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/m/OrderByTest.java index f016bd4..4cfbeb9 100644 --- a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/m/OrderByTest.java +++ b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/m/OrderByTest.java @@ -1,6 +1,8 @@ package com.github.yulichang.test.join.m; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; +import com.github.yulichang.test.join.dto.UserDTO; +import com.github.yulichang.test.join.entity.AddressDO; import com.github.yulichang.test.join.entity.UserDO; import com.github.yulichang.test.util.Reset; import com.github.yulichang.test.util.ThreadLocalUtils; @@ -55,4 +57,18 @@ public class OrderByTest { list.forEach(System.out::println); } + + @Test + void orderBy2() { + MPJLambdaWrapper wrapper = JoinWrappers.lambda(UserDO.class) + .selectAll(UserDO.class) + .selectAs(AddressDO::getId, UserDTO::getAddress) + .leftJoin(AddressDO.class, AddressDO::getUserId, UserDO::getId) + .orderByAsc(UserDTO::getAddress); + + + List list = wrapper.list(); + list.forEach(System.out::println); + } + }