别名优化

This commit is contained in:
yulichang 2023-12-11 03:42:50 +08:00
parent 25b3df16cf
commit 9ce2b519b1
11 changed files with 856 additions and 532 deletions

View File

@ -218,18 +218,13 @@ public abstract class KtAbstractLambdaWrapper<T, Children extends KtAbstractLamb
} }
@Override @Override
protected String columnToString(Integer index, Object column, boolean isJoin, PrefixEnum prefixEnum) { protected final String columnsToString(Integer index, PrefixEnum prefixEnum, String alias, KProperty<?>... columns) {
return columnToString(index, (KProperty<?>) column, isJoin, prefixEnum); return Arrays.stream(columns).map(i -> columnToString(index, alias, i, false, prefixEnum)).collect(joining(StringPool.COMMA));
} }
@Override protected String columnToString(Integer index, String alias, KProperty<?> column, boolean isJoin, PrefixEnum prefixEnum) {
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) {
Class<?> entityClass = KtUtils.ref(column); 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) { protected SelectCache getCache(KProperty<?> fn) {

View File

@ -189,64 +189,64 @@ public abstract class KtAbstractWrapper<T, Children extends KtAbstractWrapper<T,
} }
@Override @Override
public Children eq(boolean condition, KProperty<?> column, Object val) { public Children eq(boolean condition, String alias, KProperty<?> column, Object val) {
return addCondition(condition, column, EQ, val); return addCondition(condition, alias, column, EQ, val);
} }
@Override @Override
public Children ne(boolean condition, KProperty<?> column, Object val) { public Children ne(boolean condition, String alias, KProperty<?> column, Object val) {
return addCondition(condition, column, NE, val); return addCondition(condition, alias, column, NE, val);
} }
@Override @Override
public Children gt(boolean condition, KProperty<?> column, Object val) { public Children gt(boolean condition, String alias, KProperty<?> column, Object val) {
return addCondition(condition, column, GT, val); return addCondition(condition, alias, column, GT, val);
} }
@Override @Override
public Children ge(boolean condition, KProperty<?> column, Object val) { public Children ge(boolean condition, String alias, KProperty<?> column, Object val) {
return addCondition(condition, column, GE, val); return addCondition(condition, alias, column, GE, val);
} }
@Override @Override
public Children lt(boolean condition, KProperty<?> column, Object val) { public Children lt(boolean condition, String alias, KProperty<?> column, Object val) {
return addCondition(condition, column, LT, val); return addCondition(condition, alias, column, LT, val);
} }
@Override @Override
public Children le(boolean condition, KProperty<?> column, Object val) { public Children le(boolean condition, String alias, KProperty<?> column, Object val) {
return addCondition(condition, column, LE, val); return addCondition(condition, alias, column, LE, val);
} }
@Override @Override
public Children like(boolean condition, KProperty<?> column, Object val) { public Children like(boolean condition, String alias, KProperty<?> column, Object val) {
return likeValue(condition, LIKE, column, val, SqlLike.DEFAULT); return likeValue(condition, LIKE, alias, column, val, SqlLike.DEFAULT);
} }
@Override @Override
public Children notLike(boolean condition, KProperty<?> column, Object val) { public Children notLike(boolean condition, String alias, KProperty<?> column, Object val) {
return likeValue(condition, NOT_LIKE, column, val, SqlLike.DEFAULT); return likeValue(condition, NOT_LIKE, alias, column, val, SqlLike.DEFAULT);
} }
@Override @Override
public Children likeLeft(boolean condition, KProperty<?> column, Object val) { public Children likeLeft(boolean condition, String alias, KProperty<?> column, Object val) {
return likeValue(condition, LIKE, column, val, SqlLike.LEFT); return likeValue(condition, LIKE, alias, column, val, SqlLike.LEFT);
} }
@Override @Override
public Children likeRight(boolean condition, KProperty<?> column, Object val) { public Children likeRight(boolean condition, String alias, KProperty<?> column, Object val) {
return likeValue(condition, LIKE, column, val, SqlLike.RIGHT); return likeValue(condition, LIKE, alias, column, val, SqlLike.RIGHT);
} }
@Override @Override
public Children between(boolean condition, KProperty<?> column, Object val1, Object val2) { public Children between(boolean condition, String alias, KProperty<?> column, Object val1, Object val2) {
return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), BETWEEN, return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), BETWEEN,
() -> formatParam(null, val1), AND, () -> formatParam(null, val2))); () -> formatParam(null, val1), AND, () -> formatParam(null, val2)));
} }
@Override @Override
public Children notBetween(boolean condition, KProperty<?> column, Object val1, Object val2) { public Children notBetween(boolean condition, String alias, KProperty<?> column, Object val1, Object val2) {
return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), NOT_BETWEEN, return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), NOT_BETWEEN,
() -> formatParam(null, val1), AND, () -> formatParam(null, val2))); () -> formatParam(null, val1), AND, () -> formatParam(null, val2)));
} }
@ -317,122 +317,119 @@ public abstract class KtAbstractWrapper<T, Children extends KtAbstractWrapper<T,
} }
@Override @Override
public Children isNull(boolean condition, KProperty<?> column) { public Children isNull(boolean condition, String alias, KProperty<?> column) {
return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), IS_NULL)); return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), IS_NULL));
} }
@Override @Override
public Children isNotNull(boolean condition, KProperty<?> column) { public Children isNotNull(boolean condition, String alias, KProperty<?> column) {
return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), IS_NOT_NULL)); return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), IS_NOT_NULL));
} }
@Override @Override
public Children in(boolean condition, KProperty<?> column, Collection<?> coll) { public Children in(boolean condition, String alias, KProperty<?> column, Collection<?> coll) {
return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), IN, inExpression(coll))); return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), IN, inExpression(coll)));
} }
@Override @Override
public Children in(boolean condition, KProperty<?> column, Object... values) { public Children in(boolean condition, String alias, KProperty<?> column, Object... values) {
return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), IN, inExpression(values))); return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), IN, inExpression(values)));
} }
@Override @Override
public Children notIn(boolean condition, KProperty<?> column, Collection<?> coll) { public Children notIn(boolean condition, String alias, KProperty<?> column, Collection<?> coll) {
return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), NOT_IN, inExpression(coll))); return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), NOT_IN, inExpression(coll)));
} }
@Override @Override
public Children notIn(boolean condition, KProperty<?> column, Object... values) { public Children notIn(boolean condition, String alias, KProperty<?> column, Object... values) {
return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), NOT_IN, inExpression(values))); return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), NOT_IN, inExpression(values)));
} }
@Override @Override
public Children inSql(boolean condition, KProperty<?> column, String inValue) { public Children inSql(boolean condition, String alias, KProperty<?> column, String inValue) {
return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), IN, return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), IN,
() -> String.format("(%s)", inValue))); () -> String.format("(%s)", inValue)));
} }
@Override @Override
public Children notInSql(boolean condition, KProperty<?> column, String inValue) { public Children notInSql(boolean condition, String alias, KProperty<?> column, String inValue) {
return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), NOT_IN, return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), NOT_IN,
() -> String.format("(%s)", inValue))); () -> String.format("(%s)", inValue)));
} }
@Override @Override
public Children gtSql(boolean condition, KProperty<?> column, String inValue) { public Children gtSql(boolean condition, String alias, KProperty<?> column, String inValue) {
return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), GT, return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), GT,
() -> String.format("(%s)", inValue))); () -> String.format("(%s)", inValue)));
} }
@Override @Override
public Children geSql(boolean condition, KProperty<?> column, String inValue) { public Children geSql(boolean condition, String alias, KProperty<?> column, String inValue) {
return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), GE, return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), GE,
() -> String.format("(%s)", inValue))); () -> String.format("(%s)", inValue)));
} }
@Override @Override
public Children ltSql(boolean condition, KProperty<?> column, String inValue) { public Children ltSql(boolean condition, String alias, KProperty<?> column, String inValue) {
return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), LT, return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), LT,
() -> String.format("(%s)", inValue))); () -> String.format("(%s)", inValue)));
} }
@Override @Override
public Children leSql(boolean condition, KProperty<?> column, String inValue) { public Children leSql(boolean condition, String alias, KProperty<?> column, String inValue) {
return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), LE, return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), LE,
() -> String.format("(%s)", inValue))); () -> String.format("(%s)", inValue)));
} }
@Override @Override
public Children groupBy(boolean condition, List<KProperty<?>> columns) { public Children groupBy(boolean condition, String alias, List<KProperty<?>> columns) {
return maybeDo(condition, () -> { return maybeDo(condition, () -> {
if (CollectionUtils.isNotEmpty(columns)) { 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); appendSqlSegments(GROUP_BY, () -> finalOne);
} }
}); });
} }
@Override @Override
public Children groupBy(boolean condition, KProperty<?> column, KProperty<?>... columns) { public Children groupBy(boolean condition, String alias, KProperty<?>... columns) {
return maybeDo(condition, () -> { return maybeDo(condition, () -> {
String one = columnToString(index, column, false, isNo ? PrefixEnum.ON_FIRST : PrefixEnum.CD_FIRST);
if (ArrayUtils.isNotEmpty(columns)) { 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 @Override
public Children orderByAsc(boolean condition, List<KProperty<?>> columns) { public Children orderByAsc(boolean condition, String alias, List<KProperty<?>> columns) {
return maybeDo(condition, () -> { return maybeDo(condition, () -> {
if (CollectionUtils.isNotEmpty(columns)) { if (CollectionUtils.isNotEmpty(columns)) {
columns.forEach(c -> appendSqlSegments(ORDER_BY, columns.forEach(c -> appendSqlSegments(ORDER_BY,
columnToSqlSegment(index, columnSqlInjectFilter(c)), ASC)); columnToSqlSegment(index, alias, columnSqlInjectFilter(c)), ASC));
} }
}); });
} }
@Override @Override
public Children orderByDesc(boolean condition, List<KProperty<?>> columns) { public Children orderByDesc(boolean condition, String alias, List<KProperty<?>> columns) {
return maybeDo(condition, () -> { return maybeDo(condition, () -> {
if (CollectionUtils.isNotEmpty(columns)) { if (CollectionUtils.isNotEmpty(columns)) {
columns.forEach(c -> appendSqlSegments(ORDER_BY, columns.forEach(c -> appendSqlSegments(ORDER_BY,
columnToSqlSegment(index, columnSqlInjectFilter(c)), DESC)); columnToSqlSegment(index, alias, columnSqlInjectFilter(c)), DESC));
} }
}); });
} }
@Override @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, () -> { return maybeDo(condition, () -> {
final SqlKeyword mode = isAsc ? ASC : DESC; final SqlKeyword mode = isAsc ? ASC : DESC;
appendSqlSegments(ORDER_BY, columnToSqlSegment(index, column), mode);
if (ArrayUtils.isNotEmpty(columns)) { if (ArrayUtils.isNotEmpty(columns)) {
Arrays.stream(columns).forEach(c -> appendSqlSegments(ORDER_BY, 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<T, Children extends KtAbstractWrapper<T,
* 内部自用 * 内部自用
* <p>拼接 LIKE 以及 </p> * <p>拼接 LIKE 以及 </p>
*/ */
protected Children likeValue(boolean condition, SqlKeyword keyword, KProperty<?> column, Object val, SqlLike sqlLike) { protected Children likeValue(boolean condition, SqlKeyword keyword, String alias, KProperty<?> column, Object val, SqlLike sqlLike) {
return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), keyword, return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), keyword,
() -> formatParam(null, SqlUtils.concatLike(val, sqlLike)))); () -> formatParam(null, SqlUtils.concatLike(val, sqlLike))));
} }
@ -496,18 +493,18 @@ public abstract class KtAbstractWrapper<T, Children extends KtAbstractWrapper<T,
* @param sqlKeyword SQL 关键词 * @param sqlKeyword SQL 关键词
* @param val 条件值 * @param val 条件值
*/ */
protected Children addCondition(boolean condition, KProperty<?> column, SqlKeyword sqlKeyword, Object val) { protected Children addCondition(boolean condition, String alias, KProperty<?> column, SqlKeyword sqlKeyword, Object val) {
return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), sqlKeyword, return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), sqlKeyword,
() -> formatParam(null, val))); () -> formatParam(null, val)));
} }
protected <X, S> Children addCondition(boolean condition, KProperty<?> column, SqlKeyword sqlKeyword, KProperty<?> val) { protected <X, S> Children addCondition(boolean condition, String alias, KProperty<?> column, SqlKeyword sqlKeyword, String rightAlias, KProperty<?> val) {
Class<X> c = (Class<X>) KtUtils.ref(column); Class<X> c = (Class<X>) KtUtils.ref(column);
Class<S> v = (Class<S>) KtUtils.ref(val); Class<S> v = (Class<S>) KtUtils.ref(val);
return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, column), sqlKeyword, return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(index, alias, column), sqlKeyword,
isNo ? isNo ?
columnToSqlSegmentS(index, val, v == c && v == joinClass) : columnToSqlSegmentS(index, rightAlias, val, v == c && v == joinClass) :
columnToSqlSegmentS(index, val, v == c) columnToSqlSegmentS(index, rightAlias, val, v == c)
)); ));
} }
@ -690,18 +687,18 @@ public abstract class KtAbstractWrapper<T, Children extends KtAbstractWrapper<T,
/** /**
* 获取 columnName * 获取 columnName
*/ */
protected final ISqlSegment columnToSqlSegment(Integer index, KProperty<?> column) { protected final ISqlSegment columnToSqlSegment(Integer index, String alias, KProperty<?> column) {
return () -> columnToString(index, column, false, isNo ? PrefixEnum.ON_FIRST : PrefixEnum.CD_FIRST); 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; PrefixEnum prefixEnum;
if (isMain) { if (isMain) {
prefixEnum = isNo ? PrefixEnum.ON_SECOND /* 理论上不可能有这种情况 */ : PrefixEnum.CD_SECOND; prefixEnum = isNo ? PrefixEnum.ON_SECOND /* 理论上不可能有这种情况 */ : PrefixEnum.CD_SECOND;
} else { } else {
prefixEnum = isNo ? PrefixEnum.ON_SECOND : PrefixEnum.CD_ON_SECOND; 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) { protected final ISqlSegment columnToSqlSegment(String column) {
@ -711,9 +708,7 @@ public abstract class KtAbstractWrapper<T, Children extends KtAbstractWrapper<T,
/** /**
* 获取 columnName * 获取 columnName
*/ */
protected String columnToString(Integer index, Object column, boolean isJoin, PrefixEnum prefixEnum) { abstract String columnToString(Integer index, String alias, KProperty<?> column, boolean isJoin, PrefixEnum prefixEnum);
return (String) column;
}
protected String columnToString(String column) { protected String columnToString(String column) {
if (checkSqlInjection && MPJSqlInjectionUtils.check(column)) { if (checkSqlInjection && MPJSqlInjectionUtils.check(column)) {
@ -736,12 +731,12 @@ public abstract class KtAbstractWrapper<T, Children extends KtAbstractWrapper<T,
* *
* @param columns 多字段 * @param columns 多字段
*/ */
protected String columnsToString(Integer index, PrefixEnum prefixEnum, KProperty<?>... columns) { protected String columnsToString(Integer index, PrefixEnum prefixEnum, String alias, KProperty<?>... columns) {
return Arrays.stream(columns).map(i -> this.columnToString(index, i, false, prefixEnum)).collect(joining(StringPool.COMMA)); 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<KProperty<?>> columns) { protected String columnsToString(Integer index, PrefixEnum prefixEnum, String alias, List<KProperty<?>> columns) {
return columns.stream().map(i -> this.columnToString(index, i, false, prefixEnum)).collect(joining(StringPool.COMMA)); return columns.stream().map(i -> this.columnToString(index, alias, i, false, prefixEnum)).collect(joining(StringPool.COMMA));
} }
@SuppressWarnings("MethodDoesntCallSuperMethod") @SuppressWarnings("MethodDoesntCallSuperMethod")
@ -762,33 +757,33 @@ public abstract class KtAbstractWrapper<T, Children extends KtAbstractWrapper<T,
/* ************************* on语句重载 *************************** */ /* ************************* on语句重载 *************************** */
@Override @Override
public Children eq(boolean condition, KProperty<?> column, KProperty<?> val) { public Children eq(boolean condition, String alias, KProperty<?> column, String rightAlias, KProperty<?> val) {
return addCondition(condition, column, EQ, val); return addCondition(condition, alias, column, EQ, rightAlias, val);
} }
@Override @Override
public Children ne(boolean condition, KProperty<?> column, KProperty<?> val) { public Children ne(boolean condition, String alias, KProperty<?> column, String rightAlias, KProperty<?> val) {
return addCondition(condition, column, NE, val); return addCondition(condition, alias, column, NE, rightAlias, val);
} }
@Override @Override
public Children gt(boolean condition, KProperty<?> column, KProperty<?> val) { public Children gt(boolean condition, String alias, KProperty<?> column, String rightAlias, KProperty<?> val) {
return addCondition(condition, column, GT, val); return addCondition(condition, alias, column, GT, rightAlias, val);
} }
@Override @Override
public Children ge(boolean condition, KProperty<?> column, KProperty<?> val) { public Children ge(boolean condition, String alias, KProperty<?> column, String rightAlias, KProperty<?> val) {
return addCondition(condition, column, GE, val); return addCondition(condition, alias, column, GE, rightAlias, val);
} }
@Override @Override
public Children lt(boolean condition, KProperty<?> column, KProperty<?> val) { public Children lt(boolean condition, String alias, KProperty<?> column, String rightAlias, KProperty<?> val) {
return addCondition(condition, column, LT, val); return addCondition(condition, alias, column, LT, rightAlias, val);
} }
@Override @Override
public Children le(boolean condition, KProperty<?> column, KProperty<?> val) { public Children le(boolean condition, String alias, KProperty<?> column, String rightAlias, KProperty<?> val) {
return addCondition(condition, column, LE, val); return addCondition(condition, alias, column, LE, rightAlias, val);
} }
/* ****************************************** **/ /* ****************************************** **/

View File

@ -13,17 +13,13 @@ import java.util.Map;
@SuppressWarnings("unused") @SuppressWarnings("unused")
public interface Compare<Children> extends Serializable { public interface Compare<Children> extends Serializable {
/**
* ignore default Children allEq(Map<KProperty<?>, ?> params) {
*/
default Children allEq(Map<KProperty<?>,?> params) {
return allEq(params, true); return allEq(params, true);
} }
/**
* ignore default Children allEq(Map<KProperty<?>, ?> params, boolean null2IsNull) {
*/
default Children allEq(Map<KProperty<?>, ?> params, boolean null2IsNull) {
return allEq(true, params, null2IsNull); return allEq(true, params, null2IsNull);
} }
@ -35,15 +31,19 @@ public interface Compare<Children> extends Serializable {
* @param null2IsNull 是否参数为 null 自动执行 isNull 方法, false 则忽略这个字段\ * @param null2IsNull 是否参数为 null 自动执行 isNull 方法, false 则忽略这个字段\
* @return children * @return children
*/ */
Children allEq(boolean condition, Map<KProperty<?>, ?> params, boolean null2IsNull); Children allEq(boolean condition, Map<KProperty<?>, ?> params, boolean null2IsNull);
/** default Children eq(KProperty<?> column, Object val) {
* ignore return eq(true, null, column, val);
*/ }
@SuppressWarnings("UnusedReturnValue")
default Children eq(KProperty<?> column, Object val) { default Children eq(String alias, KProperty<?> column, Object val) {
return eq(true, column, 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<Children> extends Serializable {
* @param val * @param val
* @return children * @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, null, column, val);
default Children ne(KProperty<?> column, Object val) { }
return ne(true, 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<Children> extends Serializable {
* @param val * @param val
* @return children * @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, null, column, val);
default Children gt(KProperty<?> column, Object val) { }
return gt(true, 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<Children> extends Serializable {
* @param val * @param val
* @return children * @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, null, column, val);
default Children ge(KProperty<?> column, Object val) { }
return ge(true, 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<Children> extends Serializable {
* @param val * @param val
* @return children * @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, null, column, val);
default Children lt(KProperty<?> column, Object val) { }
return lt(true, 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<Children> extends Serializable {
* @param val * @param val
* @return children * @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) { 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<Children> extends Serializable {
* @param val * @param val
* @return children * @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, null, column, val1, val2);
default Children between(KProperty<?> column, Object val1, Object val2) { }
return between(true, 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<Children> extends Serializable {
* @param val2 值2 * @param val2 值2
* @return children * @return children
*/ */
Children between(boolean condition, KProperty<?> column, Object val1, Object val2); Children between(boolean condition, String alias, KProperty<?> column, Object val1, Object val2);
/** default Children notBetween(KProperty<?> column, Object val1, Object val2) {
* ignore return notBetween(true, null, column, val1, val2);
*/ }
default Children notBetween(KProperty<?> column, Object val1, Object val2) {
return notBetween(true, 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<Children> extends Serializable {
* @param val2 值2 * @param val2 值2
* @return children * @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, null, column, val);
default Children like(KProperty<?> column, Object val) { }
return like(true, 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<Children> extends Serializable {
* @param val * @param val
* @return children * @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, null, column, val);
default Children notLike(KProperty<?> column, Object val) { }
return notLike(true, 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<Children> extends Serializable {
* @param val * @param val
* @return children * @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, null, column, val);
default Children likeLeft(KProperty<?> column, Object val) { }
return likeLeft(true, 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<Children> extends Serializable {
* @param val * @param val
* @return children * @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, null, column, val);
default Children likeRight(KProperty<?> column, Object val) {
return likeRight(true, 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 '%' * LIKE '%'
* *
@ -243,5 +309,5 @@ public interface Compare<Children> extends Serializable {
* @param val * @param val
* @return children * @return children
*/ */
Children likeRight(boolean condition, KProperty<?> column, Object val); Children likeRight(boolean condition, String alias, KProperty<?> column, Object val);
} }

View File

@ -12,15 +12,20 @@ import java.util.function.Consumer;
* <p> * <p>
* copy {@link com.baomidou.mybatisplus.core.conditions.interfaces.Func} * copy {@link com.baomidou.mybatisplus.core.conditions.interfaces.Func}
*/ */
@SuppressWarnings({"unused", "JavadocDeclaration"}) @SuppressWarnings("unused")
public interface Func<Children> extends Serializable { public interface Func<Children> extends Serializable {
/**
* ignore
*/
@SuppressWarnings("UnusedReturnValue")
default Children isNull(KProperty<?> column) { 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<Children> extends Serializable {
* @param column 字段 * @param column 字段
* @return children * @return children
*/ */
Children isNull(boolean condition, KProperty<?> column); Children isNull(boolean condition, String alias, KProperty<?> column);
/**
* ignore
*/
default Children isNotNull(KProperty<?> column) { 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<Children> extends Serializable {
* @param column 字段 * @param column 字段
* @return children * @return children
*/ */
Children isNotNull(boolean condition, KProperty<?> column); Children isNotNull(boolean condition, String alias, KProperty<?> column);
/**
* ignore
*/
default Children in(KProperty<?> column, Collection<?> coll) { 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<Children> extends Serializable {
* @param coll 数据集合 * @param coll 数据集合
* @return children * @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) { 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<Children> extends Serializable {
* @param values 数据数组 * @param values 数据数组
* @return children * @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) { 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<Children> extends Serializable {
* @param coll 数据集合 * @param coll 数据集合
* @return children * @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) { 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<Children> extends Serializable {
* @param values 数据数组 * @param values 数据数组
* @return children * @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) { 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<Children> extends Serializable {
* @param inValue sql语句 * @param inValue sql语句
* @return children * @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) { 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<Children> extends Serializable {
* @param inValue sql语句 ---&gt; 1,2,3,4,5,6 或者 select id from table where id &lt; 3 * @param inValue sql语句 ---&gt; 1,2,3,4,5,6 或者 select id from table where id &lt; 3
* @return children * @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);
}
/** /**
* 字段 &gt; ( sql语句 ) * 字段 &gt; ( sql语句 )
* <p>例1: gtSql("id", "1, 2, 3, 4, 5, 6")</p> * <p>例1: gtSql("id", "1, 2, 3, 4, 5, 6")</p>
* <p>例1: gtSql("id", "select id from table where name = 'JunJun'")</p> * <p>例1: gtSql("id", "select id from table where name = 'JunJun'")</p>
* *
* @param condition * @param condition 执行条件
* @param column * @param column 字段
* @param inValue * @param inValue sql语句
* @return * @return children
*/ */
Children gtSql(boolean condition, KProperty<?> column, String inValue); Children gtSql(boolean condition, String alias, KProperty<?> column, String inValue);
/** default Children geSql(KProperty<?> column, String inValue) {
* ignore return geSql(true, null, column, inValue);
*/ }
default Children gtSql(KProperty<?> column, String inValue) {
return gtSql(true, 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<Children> extends Serializable {
* <p>例1: geSql("id", "1, 2, 3, 4, 5, 6")</p> * <p>例1: geSql("id", "1, 2, 3, 4, 5, 6")</p>
* <p>例1: geSql("id", "select id from table where name = 'JunJun'")</p> * <p>例1: geSql("id", "select id from table where name = 'JunJun'")</p>
* *
* @param condition * @param condition 执行条件
* @param column * @param column 字段
* @param inValue * @param inValue sql语句
* @return * @return children
*/ */
Children geSql(boolean condition, KProperty<?> column, String inValue); Children geSql(boolean condition, String alias, KProperty<?> column, String inValue);
/**
* ignore default Children ltSql(KProperty<?> column, String inValue) {
*/ return ltSql(true, null, column, inValue);
default Children geSql(KProperty<?> column, String inValue) { }
return geSql(true, 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<Children> extends Serializable {
* <p>例1: ltSql("id", "1, 2, 3, 4, 5, 6")</p> * <p>例1: ltSql("id", "1, 2, 3, 4, 5, 6")</p>
* <p>例1: ltSql("id", "select id from table where name = 'JunJun'")</p> * <p>例1: ltSql("id", "select id from table where name = 'JunJun'")</p>
* *
* @param condition * @param condition 执行条件
* @param column * @param column 字段
* @param inValue * @param inValue sql语句
* @return * @return children
*/ */
Children ltSql(boolean condition, KProperty<?> column, String inValue); Children ltSql(boolean condition, String alias, KProperty<?> column, String inValue);
/** default Children leSql(KProperty<?> column, String inValue) {
* ignore return leSql(true, null, column, inValue);
*/ }
default Children ltSql(KProperty<?> column, String inValue) {
return ltSql(true, 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<Children> extends Serializable {
* <p>例1: leSql("id", "1, 2, 3, 4, 5, 6")</p> * <p>例1: leSql("id", "1, 2, 3, 4, 5, 6")</p>
* <p>例1: leSql("id", "select id from table where name = 'JunJun'")</p> * <p>例1: leSql("id", "select id from table where name = 'JunJun'")</p>
* *
* @param condition * @param condition 执行条件
* @param column * @param column 字段
* @param inValue * @param inValue sql语句
* @return * @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<KProperty<?>> column) { default Children groupBy(List<KProperty<?>> column) {
return groupBy(true, column); return groupBy(true, null, column);
} }
/** default Children groupBy(String alias, List<KProperty<?>> column) {
* ignore return groupBy(true, alias, column);
*/ }
Children groupBy(boolean condition, List<KProperty<?>> columns);
/** default Children groupBy(boolean condition, List<KProperty<?>> columns) {
* ignore return groupBy(condition, null, columns);
*/ }
default Children groupBy(KProperty<?> column, KProperty<?>... columns) {
return groupBy(true, column, columns);
Children groupBy(boolean condition, String alias, List<KProperty<?>> 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<Children> extends Serializable {
* <p>: groupBy("id", "name")</p> * <p>: groupBy("id", "name")</p>
* *
* @param condition 执行条件 * @param condition 执行条件
* @param column 单个字段
* @param columns 字段数组 * @param columns 字段数组
* @return children * @return children
*/ */
Children groupBy(boolean condition, KProperty<?> column, KProperty<?>... columns); Children groupBy(boolean condition, String alias, KProperty<?>... columns);
/**
* ignore
*/
default Children orderByAsc(KProperty<?> column) { default Children orderByAsc(KProperty<?> column) {
return orderByAsc(true, column); return orderByAsc(true, (String) null, column);
} }
/** default Children orderByAsc(String alias, KProperty<?> column) {
* ignore return orderByAsc(true, alias, column);
*/ }
default Children orderByAsc(List<KProperty<?>> columns) { default Children orderByAsc(List<KProperty<?>> columns) {
return orderByAsc(true, columns); return orderByAsc(true, null, columns);
} }
/** default Children orderByAsc(String alias, List<KProperty<?>> columns) {
* ignore return orderByAsc(true, alias, columns);
*/ }
Children orderByAsc(boolean condition, List<KProperty<?>> columns);
/** default Children orderByAsc(boolean condition, List<KProperty<?>> columns) {
* ignore return orderByAsc(condition, null, columns);
*/ }
default Children orderByAsc(KProperty<?> column, KProperty<?>... columns) {
return orderByAsc(true, column, columns); Children orderByAsc(boolean condition, String alias, List<KProperty<?>> 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<Children> extends Serializable {
* <p>: orderByAsc("id", "name")</p> * <p>: orderByAsc("id", "name")</p>
* *
* @param condition 执行条件 * @param condition 执行条件
* @param column 单个字段
* @param columns 字段数组 * @param columns 字段数组
* @return children * @return children
*/ */
default Children orderByAsc(boolean condition, KProperty<?> column, KProperty<?>... columns) { default Children orderByAsc(boolean condition, KProperty<?>... columns) {
return orderBy(condition, true, column, columns); return orderBy(condition, true, null, columns);
} }
/** default Children orderByAsc(boolean condition, String alias, KProperty<?>... columns) {
* ignore return orderBy(condition, true, alias, columns);
*/
default Children orderByDesc(KProperty<?> column) {
return orderByDesc(true, column);
} }
/**
* ignore
*/
default Children orderByDesc(List<KProperty<?>> columns) { default Children orderByDesc(List<KProperty<?>> columns) {
return orderByDesc(true, columns); return orderByDesc(true, null, columns);
} }
/** default Children orderByDesc(String alias, List<KProperty<?>> columns) {
* ignore return orderByDesc(true, alias, columns);
*/ }
Children orderByDesc(boolean condition, List<KProperty<?>> columns);
/** default Children orderByDesc(boolean condition, List<KProperty<?>> columns) {
* ignore return orderByDesc(condition, null, columns);
*/ }
default Children orderByDesc(KProperty<?> column, KProperty<?>... columns) {
return orderByDesc(true, column, columns); Children orderByDesc(boolean condition, String alias, List<KProperty<?>> 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<Children> extends Serializable {
* <p>: orderByDesc("id", "name")</p> * <p>: orderByDesc("id", "name")</p>
* *
* @param condition 执行条件 * @param condition 执行条件
* @param column 单个字段
* @param columns 字段数组 * @param columns 字段数组
* @return children * @return children
*/ */
default Children orderByDesc(boolean condition, KProperty<?> column, KProperty<?>... columns) { default Children orderByDesc(boolean condition, KProperty<?>... columns) {
return orderBy(condition, false, column, 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<Children> extends Serializable {
* *
* @param condition 执行条件 * @param condition 执行条件
* @param isAsc 是否是 ASC 排序 * @param isAsc 是否是 ASC 排序
* @param column 单个字段
* @param columns 字段数组 * @param columns 字段数组
* @return children * @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) { default Children having(String sqlHaving, Object... params) {
return having(true, sqlHaving, params); return having(true, sqlHaving, params);
} }
@ -391,9 +471,7 @@ public interface Func<Children> extends Serializable {
*/ */
Children having(boolean condition, String sqlHaving, Object... params); Children having(boolean condition, String sqlHaving, Object... params);
/**
* ignore
*/
default Children func(Consumer<Children> consumer) { default Children func(Consumer<Children> consumer) {
return func(true, consumer); return func(true, consumer);
} }

View File

@ -14,11 +14,33 @@ import java.io.Serializable;
*/ */
@SuppressWarnings("unused") @SuppressWarnings("unused")
public interface OnCompare<Children> extends Serializable { public interface OnCompare<Children> extends Serializable {
/**
* ignore
*/
default Children eq(KProperty<?> column, KProperty<?> val) { 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<Children> extends Serializable {
* @param val * @param val
* @return children * @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) { 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<Children> extends Serializable {
* @param val * @param val
* @return children * @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) { 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<Children> extends Serializable {
* @param val * @param val
* @return children * @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) { 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<Children> extends Serializable {
* @param val * @param val
* @return children * @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) { 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<Children> extends Serializable {
* @param val * @param val
* @return children * @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) { 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<Children> extends Serializable {
* @param val * @param val
* @return children * @return children
*/ */
Children le(boolean condition, KProperty<?> column, KProperty<?> val); Children le(boolean condition, String alias, KProperty<?> column, String rightAlias, KProperty<?> val);
} }

View File

@ -26,6 +26,17 @@ public interface QueryJoin<Children, Entity> extends MPJBaseJoin<Entity>, String
return join(Constant.LEFT_JOIN, clazz, left, right); 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 多条件 * left join 多条件
* <p> * <p>
@ -72,6 +83,17 @@ public interface QueryJoin<Children, Entity> extends MPJBaseJoin<Entity>, String
return join(Constant.LEFT_JOIN, clazz, alias, left, right); 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 多条件 * left join 多条件
* <p> * <p>
@ -114,6 +136,13 @@ public interface QueryJoin<Children, Entity> extends MPJBaseJoin<Entity>, String
return join(Constant.RIGHT_JOIN, clazz, left, right); 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 * ignore 参考 left join
*/ */
@ -142,6 +171,13 @@ public interface QueryJoin<Children, Entity> extends MPJBaseJoin<Entity>, String
return join(Constant.RIGHT_JOIN, clazz, alias, left, right); 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 * ignore 参考 left join
*/ */
@ -171,6 +207,14 @@ public interface QueryJoin<Children, Entity> extends MPJBaseJoin<Entity>, String
return join(Constant.INNER_JOIN, clazz, on -> on.eq(left, right)); 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 * ignore 参考 left join
*/ */
@ -200,6 +244,13 @@ public interface QueryJoin<Children, Entity> extends MPJBaseJoin<Entity>, String
return join(Constant.INNER_JOIN, clazz, alias, on -> on.eq(left, right)); 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 * ignore 参考 left join
*/ */
@ -228,6 +279,13 @@ public interface QueryJoin<Children, Entity> extends MPJBaseJoin<Entity>, String
return join(Constant.FULL_JOIN, clazz, left, right); 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 * ignore 参考 left join
*/ */
@ -256,6 +314,13 @@ public interface QueryJoin<Children, Entity> extends MPJBaseJoin<Entity>, String
return join(Constant.FULL_JOIN, clazz, alias, left, right); 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 * ignore 参考 left join
*/ */
@ -292,6 +357,13 @@ public interface QueryJoin<Children, Entity> extends MPJBaseJoin<Entity>, String
return join(keyWord, clazz, on -> on.eq(left, right)); 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));
}
/** /**
* 自定义连表关键词 * 自定义连表关键词
* <p> * <p>
@ -333,6 +405,13 @@ public interface QueryJoin<Children, Entity> extends MPJBaseJoin<Entity>, String
return join(keyWord, clazz, alias, on -> on.eq(left, right)); return join(keyWord, clazz, alias, on -> on.eq(left, right));
} }
/**
* ignore
*/
default <T, X> 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));
}
/** /**
* 自定义连表关键词 * 自定义连表关键词
* <p> * <p>

View File

@ -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<AbstractMethod> getMethodList(Class<?> mapperClass) {
// List<AbstractMethod> 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<String> 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();
// }
// }
//}

View File

@ -97,6 +97,10 @@ public class MybatisPlusConfig {
@SneakyThrows @SneakyThrows
public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) { public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) {
String sql = boundSql.getSql(); String sql = boundSql.getSql();
check(sql);
}
private void check(String sql) {
List<String> sqlList = ThreadLocalUtils.get(); List<String> sqlList = ThreadLocalUtils.get();
if (CollectionUtils.isNotEmpty(sqlList)) { if (CollectionUtils.isNotEmpty(sqlList)) {
if (sqlList.stream().anyMatch(e -> Objects.equals(formatSql(sql), formatSql(e)))) { if (sqlList.stream().anyMatch(e -> Objects.equals(formatSql(sql), formatSql(e)))) {
@ -122,20 +126,7 @@ public class MybatisPlusConfig {
if (sql.toUpperCase().startsWith("SELECT")) { if (sql.toUpperCase().startsWith("SELECT")) {
return; return;
} }
List<String> sqlList = ThreadLocalUtils.get(); check(sql);
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");
}
}
} }
} }

View File

@ -25,8 +25,9 @@ class CustomWrapperTest {
//自定义wrapper扩展 //自定义wrapper扩展
class CWrapper<T> : KtLambdaWrapper<T>() { class CWrapper<T> : KtLambdaWrapper<T>() {
fun eqIfAbsent(column: KProperty<*>, `val`: Any?): CWrapper<T> { fun eqIfAbsent(column: KProperty<*>, `val`: Any?): CWrapper<T> {
super.eq(Objects.nonNull(`val`), column, `val`) eq(Objects.nonNull(`val`), column, `val`)
return this return this
} }

View File

@ -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<KMutableProperty1<UserDO, *>> =
listOf<KMutableProperty1<UserDO, *>>(UserDO::id, UserDO::name, UserDO::pid)
val wrapper: KtLambdaWrapper<UserDO> = KtWrappers.query(UserDO::class.java)
.selectAll(UserDO::class.java)
.eq(UserDO::id, 1)
.orderByAsc(columList)
val list: List<UserDO> = 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<KMutableProperty1<UserDO, *>> =
listOf<KMutableProperty1<UserDO, *>>(UserDO::id, UserDO::name, UserDO::pid)
val wrapper: KtLambdaWrapper<UserDO> = KtWrappers.query(UserDO::class.java)
.selectAll(UserDO::class.java)
.eq(UserDO::id, 1)
.groupBy(columList)
val list: List<UserDO> = wrapper.list()
list.forEach(System.out::println)
}
}

View File

@ -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<UserDO> = 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<UserDO> = 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<UserDO> = 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<UserDO> = 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<UserDO> = 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<UserDO> = userMapper!!.selectJoinList(UserDO::class.java, wrapper)
dos.forEach(System.out::println)
}
}