diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/KtAbstractLambdaWrapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/KtAbstractLambdaWrapper.java index 874577d..743305f 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/KtAbstractLambdaWrapper.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/KtAbstractLambdaWrapper.java @@ -218,18 +218,13 @@ public abstract class KtAbstractLambdaWrapper) column, isJoin, prefixEnum); + protected final String columnsToString(Integer index, PrefixEnum prefixEnum, String alias, KProperty... columns) { + return Arrays.stream(columns).map(i -> columnToString(index, alias, i, false, prefixEnum)).collect(joining(StringPool.COMMA)); } - @Override - protected final String columnsToString(Integer index, PrefixEnum prefixEnum, KProperty... columns) { - return Arrays.stream(columns).map(i -> columnToString(index, i, false, prefixEnum)).collect(joining(StringPool.COMMA)); - } - - protected String columnToString(Integer index, KProperty column, boolean isJoin, PrefixEnum prefixEnum) { + protected String columnToString(Integer index, String alias, KProperty column, boolean isJoin, PrefixEnum prefixEnum) { Class entityClass = KtUtils.ref(column); - return getDefault(index, entityClass, isJoin, prefixEnum) + StringPool.DOT + getCache(column).getColumn(); + return (alias == null ? getDefault(index, entityClass, isJoin, prefixEnum) : alias) + StringPool.DOT + getCache(column).getColumn(); } protected SelectCache getCache(KProperty fn) { diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/KtAbstractWrapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/KtAbstractWrapper.java index dc913dc..b5bcb31 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/KtAbstractWrapper.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/KtAbstractWrapper.java @@ -189,64 +189,64 @@ public abstract class KtAbstractWrapper column, Object val) { - return addCondition(condition, column, EQ, val); + public Children eq(boolean condition, String alias, KProperty column, Object val) { + return addCondition(condition, alias, column, EQ, val); } @Override - public Children ne(boolean condition, KProperty column, Object val) { - return addCondition(condition, column, NE, val); + public Children ne(boolean condition, String alias, KProperty column, Object val) { + return addCondition(condition, alias, column, NE, val); } @Override - public Children gt(boolean condition, KProperty column, Object val) { - return addCondition(condition, column, GT, val); + public Children gt(boolean condition, String alias, KProperty column, Object val) { + return addCondition(condition, alias, column, GT, val); } @Override - public Children ge(boolean condition, KProperty column, Object val) { - return addCondition(condition, column, GE, val); + public Children ge(boolean condition, String alias, KProperty column, Object val) { + return addCondition(condition, alias, column, GE, val); } @Override - public Children lt(boolean condition, KProperty column, Object val) { - return addCondition(condition, column, LT, val); + public Children lt(boolean condition, String alias, KProperty column, Object val) { + return addCondition(condition, alias, column, LT, val); } @Override - public Children le(boolean condition, KProperty column, Object val) { - return addCondition(condition, column, LE, val); + public Children le(boolean condition, String alias, KProperty column, Object val) { + return addCondition(condition, alias, column, LE, val); } @Override - public Children like(boolean condition, KProperty column, Object val) { - return likeValue(condition, LIKE, column, val, SqlLike.DEFAULT); + public Children like(boolean condition, String alias, KProperty column, Object val) { + return likeValue(condition, LIKE, alias, column, val, SqlLike.DEFAULT); } @Override - public Children notLike(boolean condition, KProperty column, Object val) { - return likeValue(condition, NOT_LIKE, column, val, SqlLike.DEFAULT); + public Children notLike(boolean condition, String alias, KProperty column, Object val) { + return likeValue(condition, NOT_LIKE, alias, column, val, SqlLike.DEFAULT); } @Override - public Children likeLeft(boolean condition, KProperty column, Object val) { - return likeValue(condition, LIKE, column, val, SqlLike.LEFT); + public Children likeLeft(boolean condition, String alias, KProperty column, Object val) { + return likeValue(condition, LIKE, alias, column, val, SqlLike.LEFT); } @Override - public Children likeRight(boolean condition, KProperty column, Object val) { - return likeValue(condition, LIKE, column, val, SqlLike.RIGHT); + public Children likeRight(boolean condition, String alias, KProperty column, Object val) { + return likeValue(condition, LIKE, alias, column, val, SqlLike.RIGHT); } @Override - public Children between(boolean condition, KProperty column, Object val1, Object val2) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), BETWEEN, + public Children between(boolean condition, String alias, KProperty column, Object val1, Object val2) { + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), BETWEEN, () -> formatParam(null, val1), AND, () -> formatParam(null, val2))); } @Override - public Children notBetween(boolean condition, KProperty column, Object val1, Object val2) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), NOT_BETWEEN, + public Children notBetween(boolean condition, String alias, KProperty column, Object val1, Object val2) { + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), NOT_BETWEEN, () -> formatParam(null, val1), AND, () -> formatParam(null, val2))); } @@ -317,122 +317,119 @@ public abstract class KtAbstractWrapper column) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), IS_NULL)); + public Children isNull(boolean condition, String alias, KProperty column) { + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), IS_NULL)); } @Override - public Children isNotNull(boolean condition, KProperty column) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), IS_NOT_NULL)); + public Children isNotNull(boolean condition, String alias, KProperty column) { + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), IS_NOT_NULL)); } @Override - public Children in(boolean condition, KProperty column, Collection coll) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), IN, inExpression(coll))); + public Children in(boolean condition, String alias, KProperty column, Collection coll) { + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), IN, inExpression(coll))); } @Override - public Children in(boolean condition, KProperty column, Object... values) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), IN, inExpression(values))); + public Children in(boolean condition, String alias, KProperty column, Object... values) { + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), IN, inExpression(values))); } @Override - public Children notIn(boolean condition, KProperty column, Collection coll) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), NOT_IN, inExpression(coll))); + public Children notIn(boolean condition, String alias, KProperty column, Collection coll) { + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), NOT_IN, inExpression(coll))); } @Override - public Children notIn(boolean condition, KProperty column, Object... values) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), NOT_IN, inExpression(values))); + public Children notIn(boolean condition, String alias, KProperty column, Object... values) { + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), NOT_IN, inExpression(values))); } @Override - public Children inSql(boolean condition, KProperty column, String inValue) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), IN, + public Children inSql(boolean condition, String alias, KProperty column, String inValue) { + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), IN, () -> String.format("(%s)", inValue))); } @Override - public Children notInSql(boolean condition, KProperty column, String inValue) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), NOT_IN, + public Children notInSql(boolean condition, String alias, KProperty column, String inValue) { + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), NOT_IN, () -> String.format("(%s)", inValue))); } @Override - public Children gtSql(boolean condition, KProperty column, String inValue) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), GT, + public Children gtSql(boolean condition, String alias, KProperty column, String inValue) { + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), GT, () -> String.format("(%s)", inValue))); } @Override - public Children geSql(boolean condition, KProperty column, String inValue) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), GE, + public Children geSql(boolean condition, String alias, KProperty column, String inValue) { + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), GE, () -> String.format("(%s)", inValue))); } @Override - public Children ltSql(boolean condition, KProperty column, String inValue) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), LT, + public Children ltSql(boolean condition, String alias, KProperty column, String inValue) { + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), LT, () -> String.format("(%s)", inValue))); } @Override - public Children leSql(boolean condition, KProperty column, String inValue) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), LE, + public Children leSql(boolean condition, String alias, KProperty column, String inValue) { + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), LE, () -> String.format("(%s)", inValue))); } @Override - public Children groupBy(boolean condition, List> columns) { + public Children groupBy(boolean condition, String alias, List> columns) { return maybeDo(condition, () -> { if (CollectionUtils.isNotEmpty(columns)) { - final String finalOne = columnsToString(index, isNo ? PrefixEnum.ON_FIRST : PrefixEnum.CD_FIRST, columns); + final String finalOne = columnsToString(index, isNo ? PrefixEnum.ON_FIRST : PrefixEnum.CD_FIRST, alias, columns); appendSqlSegments(GROUP_BY, () -> finalOne); } }); } @Override - public Children groupBy(boolean condition, KProperty column, KProperty... columns) { + public Children groupBy(boolean condition, String alias, KProperty... columns) { return maybeDo(condition, () -> { - String one = columnToString(index, column, false, isNo ? PrefixEnum.ON_FIRST : PrefixEnum.CD_FIRST); if (ArrayUtils.isNotEmpty(columns)) { - one += columnsToString(index, isNo ? PrefixEnum.ON_FIRST : PrefixEnum.CD_FIRST, columns); + final String finalOne = columnsToString(index, isNo ? PrefixEnum.ON_FIRST : PrefixEnum.CD_FIRST, alias, columns); + appendSqlSegments(GROUP_BY, () -> finalOne); } - final String finalOne = one; - appendSqlSegments(GROUP_BY, () -> finalOne); }); } @Override - public Children orderByAsc(boolean condition, List> columns) { + public Children orderByAsc(boolean condition, String alias, List> columns) { return maybeDo(condition, () -> { if (CollectionUtils.isNotEmpty(columns)) { columns.forEach(c -> appendSqlSegments(ORDER_BY, - columnToSqlSegment(index, columnSqlInjectFilter(c)), ASC)); + columnToSqlSegment(index, alias, columnSqlInjectFilter(c)), ASC)); } }); } @Override - public Children orderByDesc(boolean condition, List> columns) { + public Children orderByDesc(boolean condition, String alias, List> columns) { return maybeDo(condition, () -> { if (CollectionUtils.isNotEmpty(columns)) { columns.forEach(c -> appendSqlSegments(ORDER_BY, - columnToSqlSegment(index, columnSqlInjectFilter(c)), DESC)); + columnToSqlSegment(index, alias, columnSqlInjectFilter(c)), DESC)); } }); } @Override - public Children orderBy(boolean condition, boolean isAsc, KProperty column, KProperty... columns) { + public Children orderBy(boolean condition, boolean isAsc, String alias, KProperty... columns) { return maybeDo(condition, () -> { final SqlKeyword mode = isAsc ? ASC : DESC; - appendSqlSegments(ORDER_BY, columnToSqlSegment(index, column), mode); if (ArrayUtils.isNotEmpty(columns)) { Arrays.stream(columns).forEach(c -> appendSqlSegments(ORDER_BY, - columnToSqlSegment(index, columnSqlInjectFilter(c)), mode)); + columnToSqlSegment(index, alias, columnSqlInjectFilter(c)), mode)); } }); } @@ -478,8 +475,8 @@ public abstract class KtAbstractWrapper拼接 LIKE 以及 值

*/ - protected Children likeValue(boolean condition, SqlKeyword keyword, KProperty column, Object val, SqlLike sqlLike) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), keyword, + protected Children likeValue(boolean condition, SqlKeyword keyword, String alias, KProperty column, Object val, SqlLike sqlLike) { + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), keyword, () -> formatParam(null, SqlUtils.concatLike(val, sqlLike)))); } @@ -496,18 +493,18 @@ public abstract class KtAbstractWrapper column, SqlKeyword sqlKeyword, Object val) { - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), sqlKeyword, + protected Children addCondition(boolean condition, String alias, KProperty column, SqlKeyword sqlKeyword, Object val) { + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), sqlKeyword, () -> formatParam(null, val))); } - protected Children addCondition(boolean condition, KProperty column, SqlKeyword sqlKeyword, KProperty val) { + protected Children addCondition(boolean condition, String alias, KProperty column, SqlKeyword sqlKeyword, String rightAlias, KProperty val) { Class c = (Class) KtUtils.ref(column); Class v = (Class) KtUtils.ref(val); - return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), sqlKeyword, + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), sqlKeyword, isNo ? - columnToSqlSegmentS(index, val, v == c && v == joinClass) : - columnToSqlSegmentS(index, val, v == c) + columnToSqlSegmentS(index, rightAlias, val, v == c && v == joinClass) : + columnToSqlSegmentS(index, rightAlias, val, v == c) )); } @@ -690,18 +687,18 @@ public abstract class KtAbstractWrapper column) { - return () -> columnToString(index, column, false, isNo ? PrefixEnum.ON_FIRST : PrefixEnum.CD_FIRST); + protected final ISqlSegment columnToSqlSegment(Integer index, String alias, KProperty column) { + return () -> columnToString(index, alias, column, false, isNo ? PrefixEnum.ON_FIRST : PrefixEnum.CD_FIRST); } - protected final ISqlSegment columnToSqlSegmentS(Integer index, KProperty column, boolean isJoin) { + protected final ISqlSegment columnToSqlSegmentS(Integer index, String alias, KProperty column, boolean isJoin) { PrefixEnum prefixEnum; if (isMain) { prefixEnum = isNo ? PrefixEnum.ON_SECOND /* 理论上不可能有这种情况 */ : PrefixEnum.CD_SECOND; } else { prefixEnum = isNo ? PrefixEnum.ON_SECOND : PrefixEnum.CD_ON_SECOND; } - return () -> columnToString(index, column, isJoin, prefixEnum); + return () -> columnToString(index, alias, column, isJoin, prefixEnum); } protected final ISqlSegment columnToSqlSegment(String column) { @@ -711,9 +708,7 @@ public abstract class KtAbstractWrapper column, boolean isJoin, PrefixEnum prefixEnum); protected String columnToString(String column) { if (checkSqlInjection && MPJSqlInjectionUtils.check(column)) { @@ -736,12 +731,12 @@ public abstract class KtAbstractWrapper... columns) { - return Arrays.stream(columns).map(i -> this.columnToString(index, i, false, prefixEnum)).collect(joining(StringPool.COMMA)); + protected String columnsToString(Integer index, PrefixEnum prefixEnum, String alias, KProperty... columns) { + return Arrays.stream(columns).map(i -> this.columnToString(index, alias, i, false, prefixEnum)).collect(joining(StringPool.COMMA)); } - protected String columnsToString(Integer index, PrefixEnum prefixEnum, List> columns) { - return columns.stream().map(i -> this.columnToString(index, i, false, prefixEnum)).collect(joining(StringPool.COMMA)); + protected String columnsToString(Integer index, PrefixEnum prefixEnum, String alias, List> columns) { + return columns.stream().map(i -> this.columnToString(index, alias, i, false, prefixEnum)).collect(joining(StringPool.COMMA)); } @SuppressWarnings("MethodDoesntCallSuperMethod") @@ -762,33 +757,33 @@ public abstract class KtAbstractWrapper column, KProperty val) { - return addCondition(condition, column, EQ, val); + public Children eq(boolean condition, String alias, KProperty column, String rightAlias, KProperty val) { + return addCondition(condition, alias, column, EQ, rightAlias, val); } @Override - public Children ne(boolean condition, KProperty column, KProperty val) { - return addCondition(condition, column, NE, val); + public Children ne(boolean condition, String alias, KProperty column, String rightAlias, KProperty val) { + return addCondition(condition, alias, column, NE, rightAlias, val); } @Override - public Children gt(boolean condition, KProperty column, KProperty val) { - return addCondition(condition, column, GT, val); + public Children gt(boolean condition, String alias, KProperty column, String rightAlias, KProperty val) { + return addCondition(condition, alias, column, GT, rightAlias, val); } @Override - public Children ge(boolean condition, KProperty column, KProperty val) { - return addCondition(condition, column, GE, val); + public Children ge(boolean condition, String alias, KProperty column, String rightAlias, KProperty val) { + return addCondition(condition, alias, column, GE, rightAlias, val); } @Override - public Children lt(boolean condition, KProperty column, KProperty val) { - return addCondition(condition, column, LT, val); + public Children lt(boolean condition, String alias, KProperty column, String rightAlias, KProperty val) { + return addCondition(condition, alias, column, LT, rightAlias, val); } @Override - public Children le(boolean condition, KProperty column, KProperty val) { - return addCondition(condition, column, LE, val); + public Children le(boolean condition, String alias, KProperty column, String rightAlias, KProperty val) { + return addCondition(condition, alias, column, LE, rightAlias, val); } /* ****************************************** **/ diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/interfaces/Compare.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/interfaces/Compare.java index da0ea14..b995c71 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/interfaces/Compare.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/interfaces/Compare.java @@ -13,17 +13,13 @@ import java.util.Map; @SuppressWarnings("unused") public interface Compare extends Serializable { - /** - * ignore - */ - default Children allEq(Map,?> params) { + + default Children allEq(Map, ?> params) { return allEq(params, true); } - /** - * ignore - */ - default Children allEq(Map, ?> params, boolean null2IsNull) { + + default Children allEq(Map, ?> params, boolean null2IsNull) { return allEq(true, params, null2IsNull); } @@ -35,15 +31,19 @@ public interface Compare extends Serializable { * @param null2IsNull 是否参数为 null 自动执行 isNull 方法, false 则忽略这个字段\ * @return children */ - Children allEq(boolean condition, Map, ?> params, boolean null2IsNull); + Children allEq(boolean condition, Map, ?> params, boolean null2IsNull); - /** - * ignore - */ - @SuppressWarnings("UnusedReturnValue") - default Children eq(KProperty column, Object val) { - return eq(true, column, val); + default Children eq(KProperty column, Object val) { + return eq(true, null, column, val); + } + + default Children eq(String alias, KProperty column, Object val) { + return eq(true, alias, column, val); + } + + default Children eq(boolean condition, KProperty column, Object val) { + return eq(condition, null, column, val); } /** @@ -54,13 +54,19 @@ public interface Compare extends Serializable { * @param val 值 * @return children */ - Children eq(boolean condition, KProperty column, Object val); + Children eq(boolean condition, String alias, KProperty column, Object val); - /** - * ignore - */ - default Children ne(KProperty column, Object val) { - return ne(true, column, val); + + default Children ne(KProperty column, Object val) { + return ne(true, null, column, val); + } + + default Children ne(String alias, KProperty column, Object val) { + return ne(true, alias, column, val); + } + + default Children ne(boolean condition, KProperty column, Object val) { + return ne(condition, null, column, val); } /** @@ -71,13 +77,19 @@ public interface Compare extends Serializable { * @param val 值 * @return children */ - Children ne(boolean condition, KProperty column, Object val); + Children ne(boolean condition, String alias, KProperty column, Object val); - /** - * ignore - */ - default Children gt(KProperty column, Object val) { - return gt(true, column, val); + + default Children gt(KProperty column, Object val) { + return gt(true, null, column, val); + } + + default Children gt(String alias, KProperty column, Object val) { + return gt(true, alias, column, val); + } + + default Children gt(boolean condition, KProperty column, Object val) { + return gt(condition, null, column, val); } /** @@ -88,13 +100,19 @@ public interface Compare extends Serializable { * @param val 值 * @return children */ - Children gt(boolean condition, KProperty column, Object val); + Children gt(boolean condition, String alias, KProperty column, Object val); - /** - * ignore - */ - default Children ge(KProperty column, Object val) { - return ge(true, column, val); + + default Children ge(KProperty column, Object val) { + return ge(true, null, column, val); + } + + default Children ge(String alias, KProperty column, Object val) { + return ge(true, alias, column, val); + } + + default Children ge(boolean condition, KProperty column, Object val) { + return ge(condition, null, column, val); } /** @@ -105,13 +123,19 @@ public interface Compare extends Serializable { * @param val 值 * @return children */ - Children ge(boolean condition, KProperty column, Object val); + Children ge(boolean condition, String alias, KProperty column, Object val); - /** - * ignore - */ - default Children lt(KProperty column, Object val) { - return lt(true, column, val); + + default Children lt(KProperty column, Object val) { + return lt(true, null, column, val); + } + + default Children lt(String alias, KProperty column, Object val) { + return lt(true, alias, column, val); + } + + default Children lt(boolean condition, KProperty column, Object val) { + return lt(condition, null, column, val); } /** @@ -122,13 +146,19 @@ public interface Compare extends Serializable { * @param val 值 * @return children */ - Children lt(boolean condition, KProperty column, Object val); + Children lt(boolean condition, String alias, KProperty column, Object val); + - /** - * ignore - */ default Children le(KProperty column, Object val) { - return le(true, column, val); + return le(true, null, column, val); + } + + default Children le(String alias, KProperty column, Object val) { + return le(true, alias, column, val); + } + + default Children le(boolean condition, KProperty column, Object val) { + return le(condition, null, column, val); } /** @@ -139,13 +169,19 @@ public interface Compare extends Serializable { * @param val 值 * @return children */ - Children le(boolean condition, KProperty column, Object val); + Children le(boolean condition, String alias, KProperty column, Object val); - /** - * ignore - */ - default Children between(KProperty column, Object val1, Object val2) { - return between(true, column, val1, val2); + + default Children between(KProperty column, Object val1, Object val2) { + return between(true, null, column, val1, val2); + } + + default Children between(String alias, KProperty column, Object val1, Object val2) { + return between(true, alias, column, val1, val2); + } + + default Children between(boolean condition, KProperty column, Object val1, Object val2) { + return between(condition, null, column, val1, val2); } /** @@ -157,13 +193,18 @@ public interface Compare extends Serializable { * @param val2 值2 * @return children */ - Children between(boolean condition, KProperty column, Object val1, Object val2); + Children between(boolean condition, String alias, KProperty column, Object val1, Object val2); - /** - * ignore - */ - default Children notBetween(KProperty column, Object val1, Object val2) { - return notBetween(true, column, val1, val2); + default Children notBetween(KProperty column, Object val1, Object val2) { + return notBetween(true, null, column, val1, val2); + } + + default Children notBetween(String alias, KProperty column, Object val1, Object val2) { + return notBetween(true, alias, column, val1, val2); + } + + default Children notBetween(boolean condition, KProperty column, Object val1, Object val2) { + return notBetween(condition, null, column, val1, val2); } /** @@ -175,13 +216,19 @@ public interface Compare extends Serializable { * @param val2 值2 * @return children */ - Children notBetween(boolean condition, KProperty column, Object val1, Object val2); + Children notBetween(boolean condition, String alias, KProperty column, Object val1, Object val2); - /** - * ignore - */ - default Children like(KProperty column, Object val) { - return like(true, column, val); + + default Children like(KProperty column, Object val) { + return like(true, null, column, val); + } + + default Children like(String alisa, KProperty column, Object val) { + return like(true, alisa, column, val); + } + + default Children like(boolean condition, KProperty column, Object val) { + return like(condition, null, column, val); } /** @@ -192,13 +239,19 @@ public interface Compare extends Serializable { * @param val 值 * @return children */ - Children like(boolean condition, KProperty column, Object val); + Children like(boolean condition, String alias, KProperty column, Object val); - /** - * ignore - */ - default Children notLike(KProperty column, Object val) { - return notLike(true, column, val); + + default Children notLike(KProperty column, Object val) { + return notLike(true, null, column, val); + } + + default Children notLike(String alias, KProperty column, Object val) { + return notLike(true, alias, column, val); + } + + default Children notLike(boolean condition, KProperty column, Object val) { + return notLike(condition, null, column, val); } /** @@ -209,13 +262,19 @@ public interface Compare extends Serializable { * @param val 值 * @return children */ - Children notLike(boolean condition, KProperty column, Object val); + Children notLike(boolean condition, String alias, KProperty column, Object val); - /** - * ignore - */ - default Children likeLeft(KProperty column, Object val) { - return likeLeft(true, column, val); + + default Children likeLeft(KProperty column, Object val) { + return likeLeft(true, null, column, val); + } + + default Children likeLeft(String alias, KProperty column, Object val) { + return likeLeft(true, alias, column, val); + } + + default Children likeLeft(boolean condition, KProperty column, Object val) { + return likeLeft(condition, null, column, val); } /** @@ -226,15 +285,22 @@ public interface Compare extends Serializable { * @param val 值 * @return children */ - Children likeLeft(boolean condition, KProperty column, Object val); + Children likeLeft(boolean condition, String alias, KProperty column, Object val); - /** - * ignore - */ - default Children likeRight(KProperty column, Object val) { - return likeRight(true, column, val); + + default Children likeRight(KProperty column, Object val) { + return likeRight(true, null, column, val); } + default Children likeRight(String alias, KProperty column, Object val) { + return likeRight(true, alias, column, val); + } + + default Children likeRight(boolean condition, KProperty column, Object val) { + return likeRight(condition, null, column, val); + } + + /** * LIKE '值%' * @@ -243,5 +309,5 @@ public interface Compare extends Serializable { * @param val 值 * @return children */ - Children likeRight(boolean condition, KProperty column, Object val); + Children likeRight(boolean condition, String alias, KProperty column, Object val); } diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/interfaces/Func.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/interfaces/Func.java index ff417ff..2b74cf9 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/interfaces/Func.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/interfaces/Func.java @@ -12,15 +12,20 @@ import java.util.function.Consumer; *

* copy {@link com.baomidou.mybatisplus.core.conditions.interfaces.Func} */ -@SuppressWarnings({"unused", "JavadocDeclaration"}) +@SuppressWarnings("unused") public interface Func extends Serializable { - /** - * ignore - */ - @SuppressWarnings("UnusedReturnValue") + default Children isNull(KProperty column) { - return isNull(true, column); + return isNull(true, null, column); + } + + default Children isNull(String alias, KProperty column) { + return isNull(true, alias, column); + } + + default Children isNull(boolean condition, KProperty column) { + return isNull(condition, null, column); } /** @@ -31,13 +36,19 @@ public interface Func extends Serializable { * @param column 字段 * @return children */ - Children isNull(boolean condition, KProperty column); + Children isNull(boolean condition, String alias, KProperty column); + - /** - * ignore - */ default Children isNotNull(KProperty column) { - return isNotNull(true, column); + return isNotNull(true, null, column); + } + + default Children isNotNull(String alias, KProperty column) { + return isNotNull(true, alias, column); + } + + default Children isNotNull(boolean condition, KProperty column) { + return isNotNull(condition, null, column); } /** @@ -48,13 +59,19 @@ public interface Func extends Serializable { * @param column 字段 * @return children */ - Children isNotNull(boolean condition, KProperty column); + Children isNotNull(boolean condition, String alias, KProperty column); + - /** - * ignore - */ default Children in(KProperty column, Collection coll) { - return in(true, column, coll); + return in(true, null, column, coll); + } + + default Children in(String alias, KProperty column, Collection coll) { + return in(true, alias, column, coll); + } + + default Children in(boolean condition, KProperty column, Collection coll) { + return in(condition, null, column, coll); } /** @@ -69,13 +86,19 @@ public interface Func extends Serializable { * @param coll 数据集合 * @return children */ - Children in(boolean condition, KProperty column, Collection coll); + Children in(boolean condition, String alias, KProperty column, Collection coll); + - /** - * ignore - */ default Children in(KProperty column, Object... values) { - return in(true, column, values); + return in(true, null, column, values); + } + + default Children in(String alias, KProperty column, Object... values) { + return in(true, alias, column, values); + } + + default Children in(boolean condition, KProperty column, Object... values) { + return in(condition, null, column, values); } /** @@ -90,13 +113,19 @@ public interface Func extends Serializable { * @param values 数据数组 * @return children */ - Children in(boolean condition, KProperty column, Object... values); + Children in(boolean condition, String alias, KProperty column, Object... values); + - /** - * ignore - */ default Children notIn(KProperty column, Collection coll) { - return notIn(true, column, coll); + return notIn(true, null, column, coll); + } + + default Children notIn(String alias, KProperty column, Collection coll) { + return notIn(true, alias, column, coll); + } + + default Children notIn(boolean condition, KProperty column, Collection coll) { + return notIn(condition, null, column, coll); } /** @@ -108,13 +137,19 @@ public interface Func extends Serializable { * @param coll 数据集合 * @return children */ - Children notIn(boolean condition, KProperty column, Collection coll); + Children notIn(boolean condition, String alias, KProperty column, Collection coll); + - /** - * ignore - */ default Children notIn(KProperty column, Object... value) { - return notIn(true, column, value); + return notIn(true, null, column, value); + } + + default Children notIn(String alias, KProperty column, Object... value) { + return notIn(true, alias, column, value); + } + + default Children notIn(boolean condition, KProperty column, Object... values) { + return notIn(condition, null, column, values); } /** @@ -126,13 +161,19 @@ public interface Func extends Serializable { * @param values 数据数组 * @return children */ - Children notIn(boolean condition, KProperty column, Object... values); + Children notIn(boolean condition, String alias, KProperty column, Object... values); + - /** - * ignore - */ default Children inSql(KProperty column, String inValue) { - return inSql(true, column, inValue); + return inSql(true, null, column, inValue); + } + + default Children inSql(String alias, KProperty column, String inValue) { + return inSql(true, alias, column, inValue); + } + + default Children inSql(boolean condition, KProperty column, String inValue) { + return inSql(condition, null, column, inValue); } /** @@ -146,13 +187,19 @@ public interface Func extends Serializable { * @param inValue sql语句 * @return children */ - Children inSql(boolean condition, KProperty column, String inValue); + Children inSql(boolean condition, String alias, KProperty column, String inValue); + - /** - * ignore - */ default Children notInSql(KProperty column, String inValue) { - return notInSql(true, column, inValue); + return notInSql(true, null, column, inValue); + } + + default Children notInSql(String alias, KProperty column, String inValue) { + return notInSql(true, alias, column, inValue); + } + + default Children notInSql(boolean condition, KProperty column, String inValue) { + return notInSql(condition, null, column, inValue); } /** @@ -166,26 +213,42 @@ public interface Func extends Serializable { * @param inValue sql语句 ---> 1,2,3,4,5,6 或者 select id from table where id < 3 * @return children */ - Children notInSql(boolean condition, KProperty column, String inValue); + Children notInSql(boolean condition, String alias, KProperty column, String inValue); + default Children gtSql(KProperty column, String inValue) { + return gtSql(true, null, column, inValue); + } + + default Children gtSql(String alias, KProperty column, String inValue) { + return gtSql(true, alias, column, inValue); + } + + default Children gtSql(boolean condition, KProperty column, String inValue) { + return gtSql(condition, null, column, inValue); + } /** * 字段 > ( sql语句 ) *

例1: gtSql("id", "1, 2, 3, 4, 5, 6")

*

例1: gtSql("id", "select id from table where name = 'JunJun'")

* - * @param condition - * @param column - * @param inValue - * @return + * @param condition 执行条件 + * @param column 字段 + * @param inValue sql语句 + * @return children */ - Children gtSql(boolean condition, KProperty column, String inValue); + Children gtSql(boolean condition, String alias, KProperty column, String inValue); - /** - * ignore - */ - default Children gtSql(KProperty column, String inValue) { - return gtSql(true, column, inValue); + default Children geSql(KProperty column, String inValue) { + return geSql(true, null, column, inValue); + } + + default Children geSql(String alias, KProperty column, String inValue) { + return geSql(true, alias, column, inValue); + } + + default Children geSql(boolean condition, KProperty column, String inValue) { + return geSql(condition, null, column, inValue); } /** @@ -193,18 +256,24 @@ public interface Func extends Serializable { *

例1: geSql("id", "1, 2, 3, 4, 5, 6")

*

例1: geSql("id", "select id from table where name = 'JunJun'")

* - * @param condition - * @param column - * @param inValue - * @return + * @param condition 执行条件 + * @param column 字段 + * @param inValue sql语句 + * @return children */ - Children geSql(boolean condition, KProperty column, String inValue); + Children geSql(boolean condition, String alias, KProperty column, String inValue); - /** - * ignore - */ - default Children geSql(KProperty column, String inValue) { - return geSql(true, column, inValue); + + default Children ltSql(KProperty column, String inValue) { + return ltSql(true, null, column, inValue); + } + + default Children ltSql(String alias, KProperty column, String inValue) { + return ltSql(true, alias, column, inValue); + } + + default Children ltSql(boolean condition, KProperty column, String inValue) { + return ltSql(condition, null, column, inValue); } /** @@ -212,18 +281,23 @@ public interface Func extends Serializable { *

例1: ltSql("id", "1, 2, 3, 4, 5, 6")

*

例1: ltSql("id", "select id from table where name = 'JunJun'")

* - * @param condition - * @param column - * @param inValue - * @return + * @param condition 执行条件 + * @param column 字段 + * @param inValue sql语句 + * @return children */ - Children ltSql(boolean condition, KProperty column, String inValue); + Children ltSql(boolean condition, String alias, KProperty column, String inValue); - /** - * ignore - */ - default Children ltSql(KProperty column, String inValue) { - return ltSql(true, column, inValue); + default Children leSql(KProperty column, String inValue) { + return leSql(true, null, column, inValue); + } + + default Children leSql(String alias, KProperty column, String inValue) { + return leSql(true, alias, column, inValue); + } + + default Children leSql(boolean condition, KProperty column, String inValue) { + return leSql(condition, null, column, inValue); } /** @@ -231,44 +305,40 @@ public interface Func extends Serializable { *

例1: leSql("id", "1, 2, 3, 4, 5, 6")

*

例1: leSql("id", "select id from table where name = 'JunJun'")

* - * @param condition - * @param column - * @param inValue - * @return + * @param condition 执行条件 + * @param column 字段 + * @param inValue sql语句 + * @return children */ - Children leSql(boolean condition, KProperty column, String inValue); + Children leSql(boolean condition, String alias, KProperty column, String inValue); - /** - * ignore - */ - default Children leSql(KProperty column, String inValue) { - return leSql(true, column, inValue); - } - /** - * ignore - */ - default Children groupBy(KProperty column) { - return groupBy(true, column); - } - - /** - * ignore - */ default Children groupBy(List> column) { - return groupBy(true, column); + return groupBy(true, null, column); } - /** - * ignore - */ - Children groupBy(boolean condition, List> columns); + default Children groupBy(String alias, List> column) { + return groupBy(true, alias, column); + } - /** - * ignore - */ - default Children groupBy(KProperty column, KProperty... columns) { - return groupBy(true, column, columns); + default Children groupBy(boolean condition, List> columns) { + return groupBy(condition, null, columns); + } + + + Children groupBy(boolean condition, String alias, List> columns); + + + default Children groupBy(KProperty... columns) { + return groupBy(true, null, columns); + } + + default Children groupBy(String alias, KProperty... columns) { + return groupBy(true, alias, columns); + } + + default Children groupBy(boolean condition, KProperty... columns) { + return groupBy(condition, null, columns); } /** @@ -276,36 +346,42 @@ public interface Func extends Serializable { *

例: groupBy("id", "name")

* * @param condition 执行条件 - * @param column 单个字段 * @param columns 字段数组 * @return children */ - Children groupBy(boolean condition, KProperty column, KProperty... columns); + Children groupBy(boolean condition, String alias, KProperty... columns); + - /** - * ignore - */ default Children orderByAsc(KProperty column) { - return orderByAsc(true, column); + return orderByAsc(true, (String) null, column); } - /** - * ignore - */ + default Children orderByAsc(String alias, KProperty column) { + return orderByAsc(true, alias, column); + } + + default Children orderByAsc(List> columns) { - return orderByAsc(true, columns); + return orderByAsc(true, null, columns); } - /** - * ignore - */ - Children orderByAsc(boolean condition, List> columns); + default Children orderByAsc(String alias, List> columns) { + return orderByAsc(true, alias, columns); + } - /** - * ignore - */ - default Children orderByAsc(KProperty column, KProperty... columns) { - return orderByAsc(true, column, columns); + default Children orderByAsc(boolean condition, List> columns) { + return orderByAsc(condition, null, columns); + } + + Children orderByAsc(boolean condition, String alias, List> columns); + + + default Children orderByAsc(KProperty... columns) { + return orderByAsc(true, null, columns); + } + + default Children orderByAsc(String alias, KProperty... columns) { + return orderByAsc(true, alias, columns); } /** @@ -313,38 +389,38 @@ public interface Func extends Serializable { *

例: orderByAsc("id", "name")

* * @param condition 执行条件 - * @param column 单个字段 * @param columns 字段数组 * @return children */ - default Children orderByAsc(boolean condition, KProperty column, KProperty... columns) { - return orderBy(condition, true, column, columns); + default Children orderByAsc(boolean condition, KProperty... columns) { + return orderBy(condition, true, null, columns); } - /** - * ignore - */ - default Children orderByDesc(KProperty column) { - return orderByDesc(true, column); + default Children orderByAsc(boolean condition, String alias, KProperty... columns) { + return orderBy(condition, true, alias, columns); } - /** - * ignore - */ default Children orderByDesc(List> columns) { - return orderByDesc(true, columns); + return orderByDesc(true, null, columns); } - /** - * ignore - */ - Children orderByDesc(boolean condition, List> columns); + default Children orderByDesc(String alias, List> columns) { + return orderByDesc(true, alias, columns); + } - /** - * ignore - */ - default Children orderByDesc(KProperty column, KProperty... columns) { - return orderByDesc(true, column, columns); + default Children orderByDesc(boolean condition, List> columns) { + return orderByDesc(condition, null, columns); + } + + Children orderByDesc(boolean condition, String alias, List> columns); + + + default Children orderByDesc(KProperty... columns) { + return orderByDesc(true, null, columns); + } + + default Children orderByDesc(String alias, KProperty... columns) { + return orderByDesc(true, alias, columns); } /** @@ -352,12 +428,19 @@ public interface Func extends Serializable { *

例: orderByDesc("id", "name")

* * @param condition 执行条件 - * @param column 单个字段 * @param columns 字段数组 * @return children */ - default Children orderByDesc(boolean condition, KProperty column, KProperty... columns) { - return orderBy(condition, false, column, columns); + default Children orderByDesc(boolean condition, KProperty... columns) { + return orderBy(condition, false, null, columns); + } + + default Children orderByDesc(boolean condition, String alias, KProperty... columns) { + return orderBy(condition, false, alias, columns); + } + + default Children orderBy(boolean condition, boolean isAsc, KProperty... columns) { + return orderBy(condition, isAsc, null, columns); } /** @@ -366,15 +449,12 @@ public interface Func extends Serializable { * * @param condition 执行条件 * @param isAsc 是否是 ASC 排序 - * @param column 单个字段 * @param columns 字段数组 * @return children */ - Children orderBy(boolean condition, boolean isAsc, KProperty column, KProperty... columns); + Children orderBy(boolean condition, boolean isAsc, String alias, KProperty... columns); + - /** - * ignore - */ default Children having(String sqlHaving, Object... params) { return having(true, sqlHaving, params); } @@ -391,9 +471,7 @@ public interface Func extends Serializable { */ Children having(boolean condition, String sqlHaving, Object... params); - /** - * ignore - */ + default Children func(Consumer consumer) { return func(true, consumer); } diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/interfaces/OnCompare.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/interfaces/OnCompare.java index f26dbef..430eaa8 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/interfaces/OnCompare.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/interfaces/OnCompare.java @@ -14,11 +14,33 @@ import java.io.Serializable; */ @SuppressWarnings("unused") public interface OnCompare extends Serializable { - /** - * ignore - */ + default Children eq(KProperty column, KProperty val) { - return eq(true, column, val); + return eq(true, null, column, null, val); + } + + default Children eq(String alias, KProperty column, KProperty val) { + return eq(true, alias, column, null, val); + } + + default Children eq(KProperty column, String rightAlias, KProperty val) { + return eq(true, null, column, rightAlias, val); + } + + default Children eq(String alias, KProperty column, String rightAlias, KProperty val) { + return eq(true, alias, column, rightAlias, val); + } + + default Children eq(boolean condition, KProperty column, KProperty val) { + return eq(condition, null, column, null, val); + } + + default Children eq(boolean condition, String alias, KProperty column, KProperty val) { + return eq(condition, alias, column, null, val); + } + + default Children eq(boolean condition, KProperty column, String rightAlias, KProperty val) { + return eq(condition, null, column, rightAlias, val); } /** @@ -29,13 +51,35 @@ public interface OnCompare extends Serializable { * @param val 值 * @return children */ - Children eq(boolean condition, KProperty column, KProperty val); + Children eq(boolean condition, String alias, KProperty column, String rightAlias, KProperty val); + - /** - * ignore - */ default Children ne(KProperty column, KProperty val) { - return ne(true, column, val); + return ne(true, null, column, null, val); + } + + default Children ne(String alias, KProperty column, KProperty val) { + return ne(true, alias, column, null, val); + } + + default Children ne(KProperty column, String rightAlias, KProperty val) { + return ne(true, null, column, rightAlias, val); + } + + default Children ne(String alias, KProperty column, String rightAlias, KProperty val) { + return ne(true, alias, column, rightAlias, val); + } + + default Children ne(boolean condition, KProperty column, KProperty val) { + return ne(condition, null, column, null, val); + } + + default Children ne(boolean condition, String alias, KProperty column, KProperty val) { + return ne(condition, alias, column, null, val); + } + + default Children ne(boolean condition, KProperty column, String rightAlias, KProperty val) { + return ne(condition, null, column, rightAlias, val); } /** @@ -46,13 +90,35 @@ public interface OnCompare extends Serializable { * @param val 值 * @return children */ - Children ne(boolean condition, KProperty column, KProperty val); + Children ne(boolean condition, String alias, KProperty column, String rightAlias, KProperty val); + - /** - * ignore - */ default Children gt(KProperty column, KProperty val) { - return gt(true, column, val); + return gt(true, null, column, null, val); + } + + default Children gt(String alias, KProperty column, KProperty val) { + return gt(true, alias, column, null, val); + } + + default Children gt(KProperty column, String rightAlias, KProperty val) { + return gt(true, null, column, rightAlias, val); + } + + default Children gt(String alias, KProperty column, String rightAlias, KProperty val) { + return gt(true, alias, column, rightAlias, val); + } + + default Children gt(boolean condition, KProperty column, KProperty val) { + return gt(condition, null, column, null, val); + } + + default Children gt(boolean condition, String alias, KProperty column, KProperty val) { + return gt(condition, alias, column, null, val); + } + + default Children gt(boolean condition, KProperty column, String rightAlias, KProperty val) { + return gt(condition, null, column, rightAlias, val); } /** @@ -63,13 +129,35 @@ public interface OnCompare extends Serializable { * @param val 值 * @return children */ - Children gt(boolean condition, KProperty column, KProperty val); + Children gt(boolean condition, String alias, KProperty column, String rightAlias, KProperty val); + - /** - * ignore - */ default Children ge(KProperty column, KProperty val) { - return ge(true, column, val); + return ge(true, null, column, null, val); + } + + default Children ge(String alias, KProperty column, KProperty val) { + return ge(true, alias, column, null, val); + } + + default Children ge(KProperty column, String rightAlias, KProperty val) { + return ge(true, null, column, rightAlias, val); + } + + default Children ge(String alias, KProperty column, String rightAlias, KProperty val) { + return ge(true, alias, column, rightAlias, val); + } + + default Children ge(boolean condition, KProperty column, KProperty val) { + return ge(condition, null, column, null, val); + } + + default Children ge(boolean condition, String alias, KProperty column, KProperty val) { + return ge(condition, alias, column, null, val); + } + + default Children ge(boolean condition, KProperty column, String rightAlias, KProperty val) { + return ge(condition, null, column, rightAlias, val); } /** @@ -80,13 +168,35 @@ public interface OnCompare extends Serializable { * @param val 值 * @return children */ - Children ge(boolean condition, KProperty column, KProperty val); + Children ge(boolean condition, String alias, KProperty column, String rightAlias, KProperty val); + - /** - * ignore - */ default Children lt(KProperty column, KProperty val) { - return lt(true, column, val); + return lt(true, null, column, null, val); + } + + default Children lt(String alias, KProperty column, KProperty val) { + return lt(true, alias, column, null, val); + } + + default Children lt(KProperty column, String rightAlias, KProperty val) { + return lt(true, null, column, rightAlias, val); + } + + default Children lt(String alias, KProperty column, String rightAlias, KProperty val) { + return lt(true, alias, column, rightAlias, val); + } + + default Children lt(boolean condition, KProperty column, KProperty val) { + return lt(condition, null, column, null, val); + } + + default Children lt(boolean condition, String alias, KProperty column, KProperty val) { + return lt(condition, alias, column, null, val); + } + + default Children lt(boolean condition, KProperty column, String rightAlias, KProperty val) { + return lt(condition, null, column, rightAlias, val); } /** @@ -97,13 +207,35 @@ public interface OnCompare extends Serializable { * @param val 值 * @return children */ - Children lt(boolean condition, KProperty column, KProperty val); + Children lt(boolean condition, String alias, KProperty column, String rightAlias, KProperty val); + - /** - * ignore - */ default Children le(KProperty column, KProperty val) { - return le(true, column, val); + return le(true, null, column, null, val); + } + + default Children le(String alias, KProperty column, KProperty val) { + return le(true, alias, column, null, val); + } + + default Children le(KProperty column, String rightAlias, KProperty val) { + return le(true, null, column, rightAlias, val); + } + + default Children le(String alias, KProperty column, String rightAlias, KProperty val) { + return le(true, alias, column, rightAlias, val); + } + + default Children le(boolean condition, KProperty column, KProperty val) { + return le(condition, null, column, null, val); + } + + default Children le(boolean condition, String alias, KProperty column, KProperty val) { + return le(condition, alias, column, null, val); + } + + default Children le(boolean condition, KProperty column, String rightAlias, KProperty val) { + return le(condition, null, column, rightAlias, val); } /** @@ -114,5 +246,5 @@ public interface OnCompare extends Serializable { * @param val 值 * @return children */ - Children le(boolean condition, KProperty column, KProperty val); + Children le(boolean condition, String alias, KProperty column, String rightAlias, KProperty val); } diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/interfaces/QueryJoin.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/interfaces/QueryJoin.java index d580e69..2767851 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/interfaces/QueryJoin.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/kt/interfaces/QueryJoin.java @@ -26,6 +26,17 @@ public interface QueryJoin extends MPJBaseJoin, String return join(Constant.LEFT_JOIN, clazz, left, right); } + /** + * left join + * + * @param clazz 关联的实体类 + * @param left 条件 + * @param right 条件 + */ + default Children leftJoin(Class clazz, KProperty left, String rightAlias, KProperty right) { + return join(Constant.LEFT_JOIN, clazz, left, rightAlias, right); + } + /** * left join 多条件 *

@@ -72,6 +83,17 @@ public interface QueryJoin extends MPJBaseJoin, String return join(Constant.LEFT_JOIN, clazz, alias, left, right); } + /** + * left join + * + * @param clazz 关联的实体类 + * @param left 条件 + * @param right 条件 + */ + default Children leftJoin(Class clazz, String alias, KProperty left, String rightAlias, KProperty right) { + return join(Constant.LEFT_JOIN, clazz, alias, left, rightAlias, right); + } + /** * left join 多条件 *

@@ -114,6 +136,13 @@ public interface QueryJoin extends MPJBaseJoin, String return join(Constant.RIGHT_JOIN, clazz, left, right); } + /** + * ignore 参考 left join + */ + default Children rightJoin(Class clazz, KProperty left, String rightAlias, KProperty right) { + return join(Constant.RIGHT_JOIN, clazz, left, rightAlias, right); + } + /** * ignore 参考 left join */ @@ -142,6 +171,13 @@ public interface QueryJoin extends MPJBaseJoin, String return join(Constant.RIGHT_JOIN, clazz, alias, left, right); } + /** + * ignore 参考 left join + */ + default Children rightJoin(Class clazz, String alias, KProperty left, String rightAlias, KProperty right) { + return join(Constant.RIGHT_JOIN, clazz, alias, left, rightAlias, right); + } + /** * ignore 参考 left join */ @@ -171,6 +207,14 @@ public interface QueryJoin extends MPJBaseJoin, String return join(Constant.INNER_JOIN, clazz, on -> on.eq(left, right)); } + /** + * ignore 参考 left join + */ + default Children innerJoin(Class clazz, KProperty left, String rightAlias, KProperty right) { + return join(Constant.INNER_JOIN, clazz, left, rightAlias, right); + } + + /** * ignore 参考 left join */ @@ -200,6 +244,13 @@ public interface QueryJoin extends MPJBaseJoin, String return join(Constant.INNER_JOIN, clazz, alias, on -> on.eq(left, right)); } + /** + * ignore 参考 left join + */ + default Children innerJoin(Class clazz, String alias, KProperty left, String rightAlias, KProperty right) { + return join(Constant.INNER_JOIN, clazz, alias, left, rightAlias, right); + } + /** * ignore 参考 left join */ @@ -228,6 +279,13 @@ public interface QueryJoin extends MPJBaseJoin, String return join(Constant.FULL_JOIN, clazz, left, right); } + /** + * ignore 参考 left join + */ + default Children fullJoin(Class clazz, KProperty left, String rightAlias, KProperty right) { + return join(Constant.FULL_JOIN, clazz, left, rightAlias, right); + } + /** * ignore 参考 left join */ @@ -256,6 +314,13 @@ public interface QueryJoin extends MPJBaseJoin, String return join(Constant.FULL_JOIN, clazz, alias, left, right); } + /** + * ignore 参考 left join + */ + default Children fullJoin(Class clazz, String alias, KProperty left, String rightAlias, KProperty right) { + return join(Constant.FULL_JOIN, clazz, alias, left, rightAlias, right); + } + /** * ignore 参考 left join */ @@ -292,6 +357,13 @@ public interface QueryJoin extends MPJBaseJoin, String return join(keyWord, clazz, on -> on.eq(left, right)); } + /** + * ignore + */ + default Children join(String keyWord, Class clazz, KProperty left, String rightAlias, KProperty right) { + return join(keyWord, clazz, on -> on.eq(left, rightAlias, right)); + } + /** * 自定义连表关键词 *

@@ -333,6 +405,13 @@ public interface QueryJoin extends MPJBaseJoin, String return join(keyWord, clazz, alias, on -> on.eq(left, right)); } + /** + * ignore + */ + default Children join(String keyWord, Class clazz, String alias, KProperty left, String rightAlias, KProperty right) { + return join(keyWord, clazz, alias, on -> on.eq(left, rightAlias, right)); + } + /** * 自定义连表关键词 *

diff --git a/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/config/MPConfig.java b/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/config/MPConfig.java deleted file mode 100644 index 075f156..0000000 --- a/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/config/MPConfig.java +++ /dev/null @@ -1,150 +0,0 @@ -//package com.github.yulichang.test.config; -// -//import com.baomidou.mybatisplus.core.injector.AbstractMethod; -//import com.baomidou.mybatisplus.core.injector.ISqlInjector; -//import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -//import com.baomidou.mybatisplus.core.toolkit.StringUtils; -//import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn; -//import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; -//import com.github.yulichang.injector.MPJSqlInjector; -//import com.github.yulichang.test.util.ThreadLocalUtils; -//import org.apache.ibatis.cache.CacheKey; -//import org.apache.ibatis.executor.Executor; -//import org.apache.ibatis.executor.statement.StatementHandler; -//import org.apache.ibatis.mapping.BoundSql; -//import org.apache.ibatis.mapping.MappedStatement; -//import org.apache.ibatis.plugin.*; -//import org.apache.ibatis.session.ResultHandler; -//import org.apache.ibatis.session.RowBounds; -//import org.springframework.context.annotation.Bean; -//import org.springframework.context.annotation.Configuration; -//import org.springframework.context.annotation.Primary; -//import org.springframework.core.Ordered; -//import org.springframework.core.annotation.Order; -//import org.springframework.stereotype.Component; -// -//import java.sql.Connection; -//import java.util.List; -//import java.util.Objects; -//import java.util.StringTokenizer; -// -///** -// * mp 3.3.x -// */ -//@Configuration -//public class MPConfig { -// -// @Bean -// public PaginationInterceptor mybatisPlusInterceptor() { -// return new PaginationInterceptor(); -// } -// -// @Bean -// @Primary -// @Order(Ordered.HIGHEST_PRECEDENCE) -// public ISqlInjector sqlInjector() { -// return new MPJSqlInjector() { -// @Override -// public List getMethodList(Class mapperClass) { -// List list = super.getMethodList(mapperClass); -// //添加你的方法 -// list.add(new InsertBatchSomeColumn()); -// return list; -// } -// }; -// } -// -// @Component -// @Intercepts({ -// @Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class}), -// @Signature(type = StatementHandler.class, method = "getBoundSql", args = {}), -// @Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class}), -// @Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}), -// @Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class, CacheKey.class, BoundSql.class}), -// }) -// public static class SqlInterceptor implements Interceptor { -// -// @Override -// public Object intercept(Invocation invocation) throws Throwable { -// Object target = invocation.getTarget(); -// BoundSql boundSql = null; -// if (target instanceof StatementHandler) { -// boundSql = ((StatementHandler) target).getBoundSql(); -// String sql = boundSql.getSql(); -// List strings = ThreadLocalUtils.get(); -// if (CollectionUtils.isNotEmpty(strings)) { -// boolean flag = false; -// String ss = null; -// for (String s : strings) { -// if (sql != null && s != null) { -// String s1 = formatSql(sql); -// String s2 = formatSql(s); -// if (StringUtils.isNotBlank(s)) { -// if (!Objects.equals(s1.toLowerCase(), s2.toLowerCase())) { -// ss = s; -// } else { -// flag = true; -// break; -// -// } -// } -// } -// } -// if (flag) { -// System.out.println("==============================================="); -// System.out.println(); -// System.out.println("pass"); -// System.out.println(); -// System.out.println("==============================================="); -// } else { -// System.err.println("执行sql: " + removeExtraWhitespaces(sql)); -// System.err.println("预期sql: " + removeExtraWhitespaces(ss)); -// throw new RuntimeException("sql error"); -// } -// } -// } -// System.out.println(boundSql); -// return invocation.proceed(); -// } -// -// @Override -// public Object plugin(Object target) { -// if (target instanceof Executor || target instanceof StatementHandler) { -// return Plugin.wrap(target, this); -// } -// return target; -// } -// -// private String formatSql(String sql) { -// if (StringUtils.isBlank(sql)) { -// return sql; -// } -// sql = sql.replaceAll("\n", ""); -// sql = sql.replaceAll("\r", ""); -// sql = sql.replaceAll("\t", ""); -// return dg(sql); -// } -// -// private String dg(String str) { -// if (str.contains(" ")) { -// str = str.replaceAll(" ", ""); -// return dg(str); -// } -// return str; -// } -// -// private String removeExtraWhitespaces(String original) { -// StringTokenizer tokenizer = new StringTokenizer(original); -// StringBuilder builder = new StringBuilder(); -// boolean hasMoreTokens = tokenizer.hasMoreTokens(); -// while (hasMoreTokens) { -// builder.append(tokenizer.nextToken()); -// hasMoreTokens = tokenizer.hasMoreTokens(); -// if (hasMoreTokens) { -// builder.append(' '); -// } -// } -// return builder.toString(); -// } -// } -//} 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 2d9c743..f2a9b23 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 @@ -97,6 +97,10 @@ public class MybatisPlusConfig { @SneakyThrows public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) { String sql = boundSql.getSql(); + check(sql); + } + + private void check(String sql) { List sqlList = ThreadLocalUtils.get(); if (CollectionUtils.isNotEmpty(sqlList)) { if (sqlList.stream().anyMatch(e -> Objects.equals(formatSql(sql), formatSql(e)))) { @@ -122,20 +126,7 @@ public class MybatisPlusConfig { if (sql.toUpperCase().startsWith("SELECT")) { return; } - List sqlList = ThreadLocalUtils.get(); - if (CollectionUtils.isNotEmpty(sqlList)) { - if (sqlList.stream().anyMatch(e -> Objects.equals(formatSql(sql), formatSql(e)))) { - System.out.println("==============================================="); - System.out.println(); - System.out.println("pass"); - System.out.println(); - System.out.println("==============================================="); - } else { - System.err.println("执行sql: " + SqlSourceBuilder.removeExtraWhitespaces(sql)); - sqlList.forEach(i -> System.err.println("预期sql: " + SqlSourceBuilder.removeExtraWhitespaces(i))); - throw new RuntimeException("sql error"); - } - } + check(sql); } } diff --git a/mybatis-plus-join-test/test-kotlin/src/test/java/com/github/yulichang/test/kt/m/CustomWrapperTest.kt b/mybatis-plus-join-test/test-kotlin/src/test/java/com/github/yulichang/test/kt/m/CustomWrapperTest.kt index e0f0b9c..78c94a8 100644 --- a/mybatis-plus-join-test/test-kotlin/src/test/java/com/github/yulichang/test/kt/m/CustomWrapperTest.kt +++ b/mybatis-plus-join-test/test-kotlin/src/test/java/com/github/yulichang/test/kt/m/CustomWrapperTest.kt @@ -25,8 +25,9 @@ class CustomWrapperTest { //自定义wrapper扩展 class CWrapper : KtLambdaWrapper() { + fun eqIfAbsent(column: KProperty<*>, `val`: Any?): CWrapper { - super.eq(Objects.nonNull(`val`), column, `val`) + eq(Objects.nonNull(`val`), column, `val`) return this } diff --git a/mybatis-plus-join-test/test-kotlin/src/test/java/com/github/yulichang/test/kt/m/OrderByTest.kt b/mybatis-plus-join-test/test-kotlin/src/test/java/com/github/yulichang/test/kt/m/OrderByTest.kt new file mode 100644 index 0000000..9e22b85 --- /dev/null +++ b/mybatis-plus-join-test/test-kotlin/src/test/java/com/github/yulichang/test/kt/m/OrderByTest.kt @@ -0,0 +1,49 @@ +package com.github.yulichang.test.kt.m + +import com.github.yulichang.kt.KtLambdaWrapper +import com.github.yulichang.test.kt.entity.UserDO +import com.github.yulichang.test.util.ThreadLocalUtils +import com.github.yulichang.toolkit.KtWrappers +import org.junit.jupiter.api.BeforeEach +import org.springframework.boot.test.context.SpringBootTest +import kotlin.reflect.KMutableProperty1 + +@SpringBootTest +class OrderByTest { + @BeforeEach + fun setUp() { + com.github.yulichang.test.util.Reset.reset() + } + + @org.junit.jupiter.api.Test + fun orderBy() { + ThreadLocalUtils.set( + "SELECT t.id, t.pid, t.`name`, t.`json`, t.sex, t.head_img, t.create_time, t.address_id, t.address_id2, t.del, t.create_by, t.update_by " + + "FROM `user` t WHERE t.del = false AND (t.id = ?) ORDER BY t.id ASC, t.`name` ASC, t.pid ASC" + ) + val columList: List> = + listOf>(UserDO::id, UserDO::name, UserDO::pid) + val wrapper: KtLambdaWrapper = KtWrappers.query(UserDO::class.java) + .selectAll(UserDO::class.java) + .eq(UserDO::id, 1) + .orderByAsc(columList) + val list: List = wrapper.list() + list.forEach(System.out::println) + } + + @org.junit.jupiter.api.Test + fun orderBy1() { + ThreadLocalUtils.set( + "SELECT t.id, t.pid, t.`name`, t.`json`, t.sex, t.head_img, t.create_time, t.address_id, t.address_id2, t.del, t.create_by, t.update_by " + + "FROM `user` t WHERE t.del = false AND (t.id = ?) GROUP BY t.id, t.`name`, t.pid" + ) + val columList: List> = + listOf>(UserDO::id, UserDO::name, UserDO::pid) + val wrapper: KtLambdaWrapper = KtWrappers.query(UserDO::class.java) + .selectAll(UserDO::class.java) + .eq(UserDO::id, 1) + .groupBy(columList) + val list: List = wrapper.list() + list.forEach(System.out::println) + } +} diff --git a/mybatis-plus-join-test/test-kotlin/src/test/java/com/github/yulichang/test/kt/m/TableAliasTest.kt b/mybatis-plus-join-test/test-kotlin/src/test/java/com/github/yulichang/test/kt/m/TableAliasTest.kt new file mode 100644 index 0000000..e6a4d1a --- /dev/null +++ b/mybatis-plus-join-test/test-kotlin/src/test/java/com/github/yulichang/test/kt/m/TableAliasTest.kt @@ -0,0 +1,88 @@ +package com.github.yulichang.test.kt.m + +import com.github.yulichang.kt.KtLambdaWrapper +import com.github.yulichang.test.kt.entity.AddressDO +import com.github.yulichang.test.kt.entity.AreaDO +import com.github.yulichang.test.kt.entity.UserDO +import com.github.yulichang.test.kt.mapper.UserMapper +import com.github.yulichang.test.util.Reset +import com.github.yulichang.test.util.ThreadLocalUtils +import com.github.yulichang.toolkit.KtWrappers +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.context.SpringBootTest + +@SpringBootTest +class TableAliasTest { + + @Autowired + private val userMapper: UserMapper? = null + + @BeforeEach + fun setUp() { + Reset.reset() + } + + @Test + fun tableAlias() { + ThreadLocalUtils.set( + "SELECT t.id, t.pid, t.`name`, t.`json`, t.sex, t.head_img, t.create_time, t.address_id, t.address_id2, t.del, t.create_by, t.update_by FROM `user` t " + + "LEFT JOIN address addr1 ON (addr1.id = t.address_id) " + + "LEFT JOIN address addr2 ON (addr2.id = t.address_id2) " + + "LEFT JOIN area area1 ON (area1.id = addr1.area_id) " + + "WHERE t.del = false AND addr1.del = false AND addr2.del = false AND area1.del = false " + + "GROUP BY t.id" + ) + val wrapper: KtLambdaWrapper = KtWrappers.query(UserDO::class.java) + .selectAll(UserDO::class.java) + .leftJoin(AddressDO::class.java, "addr1", AddressDO::id, UserDO::addressId) + .leftJoin(AddressDO::class.java, "addr2", AddressDO::id, UserDO::addressId2) + .leftJoin(AreaDO::class.java, "area1", AreaDO::id, "addr1", AddressDO::areaId) + .groupBy(UserDO::id) + val dos: List = userMapper!!.selectJoinList(UserDO::class.java, wrapper) + dos.forEach(System.out::println) + } + + @Test + fun tableAlias2() { + ThreadLocalUtils.set( + "SELECT t.id, t.pid, t.`name`, t.`json`, t.sex, t.head_img, t.create_time, t.address_id, t.address_id2, t.del, t.create_by, t.update_by FROM `user` t " + + "LEFT JOIN address addr1 ON (addr1.id = t.address_id) " + + "LEFT JOIN address addr2 ON (addr2.id = t.address_id2) " + + "LEFT JOIN area area1 ON (area1.id = addr2.area_id) " + + "WHERE t.del = false AND addr1.del = false AND addr2.del = false AND area1.del = false " + + "GROUP BY t.id ORDER BY addr1.id DESC" + ) + val wrapper: KtLambdaWrapper = KtWrappers.query(UserDO::class.java) + .selectAll(UserDO::class.java) + .leftJoin(AddressDO::class.java, "addr1", AddressDO::id, UserDO::addressId) + .leftJoin(AddressDO::class.java, "addr2", AddressDO::id, UserDO::addressId2) + .leftJoin(AreaDO::class.java, "area1", AreaDO::id, "addr2", AddressDO::areaId) + .groupBy(UserDO::id) + .orderByDesc("addr1", AddressDO::id) + val dos: List = userMapper!!.selectJoinList(UserDO::class.java, wrapper) + dos.forEach(System.out::println) + } + + @Test + fun tableAliasEQ() { + ThreadLocalUtils.set( + "SELECT t.id, t.pid, t.`name`, t.`json`, t.sex, t.head_img, t.create_time, t.address_id, t.address_id2, t.del, t.create_by, t.update_by FROM `user` t " + + "LEFT JOIN address addr1 ON (addr1.id = t.address_id) " + + "LEFT JOIN address addr2 ON (addr2.id = t.address_id2) " + + "LEFT JOIN area area1 ON (area1.id = addr2.area_id) WHERE t.del = false AND addr1.del = false AND addr2.del = false AND area1.del = false " + + "AND (addr1.id = ? AND addr2.id = ? AND addr1.id = ?)" + ) + val wrapper: KtLambdaWrapper = KtWrappers.query(UserDO::class.java) + .selectAll(UserDO::class.java) + .leftJoin(AddressDO::class.java, "addr1", AddressDO::id, UserDO::addressId) + .leftJoin(AddressDO::class.java, "addr2", AddressDO::id, UserDO::addressId2) + .leftJoin(AreaDO::class.java, "area1", AreaDO::id, "addr2", AddressDO::areaId) + .eq("addr1", AddressDO::id, 1) + .eq("addr2", AddressDO::id, 2) + .eq("addr1", AddressDO::id, 3) + val dos: List = userMapper!!.selectJoinList(UserDO::class.java, wrapper) + dos.forEach(System.out::println) + } +}