别名优化

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
protected String columnToString(Integer index, Object column, boolean isJoin, PrefixEnum prefixEnum) {
return columnToString(index, (KProperty<?>) 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) {

View File

@ -189,64 +189,64 @@ public abstract class KtAbstractWrapper<T, Children extends KtAbstractWrapper<T,
}
@Override
public Children eq(boolean condition, KProperty<?> 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<T, Children extends KtAbstractWrapper<T,
}
@Override
public Children isNull(boolean condition, KProperty<?> 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<KProperty<?>> columns) {
public Children groupBy(boolean condition, String alias, List<KProperty<?>> 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 = one;
final String finalOne = columnsToString(index, isNo ? PrefixEnum.ON_FIRST : PrefixEnum.CD_FIRST, alias, columns);
appendSqlSegments(GROUP_BY, () -> finalOne);
}
});
}
@Override
public Children orderByAsc(boolean condition, List<KProperty<?>> columns) {
public Children orderByAsc(boolean condition, String alias, List<KProperty<?>> 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<KProperty<?>> columns) {
public Children orderByDesc(boolean condition, String alias, List<KProperty<?>> 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<T, Children extends KtAbstractWrapper<T,
* 内部自用
* <p>拼接 LIKE 以及 </p>
*/
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<T, Children extends KtAbstractWrapper<T,
* @param sqlKeyword SQL 关键词
* @param val 条件值
*/
protected Children addCondition(boolean condition, KProperty<?> 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 <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<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 ?
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<T, Children extends KtAbstractWrapper<T,
/**
* 获取 columnName
*/
protected final ISqlSegment columnToSqlSegment(Integer index, KProperty<?> 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<T, Children extends KtAbstractWrapper<T,
/**
* 获取 columnName
*/
protected String columnToString(Integer index, Object column, boolean isJoin, PrefixEnum prefixEnum) {
return (String) column;
}
abstract String columnToString(Integer index, String alias, KProperty<?> column, boolean isJoin, PrefixEnum prefixEnum);
protected String columnToString(String column) {
if (checkSqlInjection && MPJSqlInjectionUtils.check(column)) {
@ -736,12 +731,12 @@ public abstract class KtAbstractWrapper<T, Children extends KtAbstractWrapper<T,
*
* @param columns 多字段
*/
protected String columnsToString(Integer index, PrefixEnum prefixEnum, KProperty<?>... 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<KProperty<?>> 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<KProperty<?>> 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<T, Children extends KtAbstractWrapper<T,
/* ************************* on语句重载 *************************** */
@Override
public Children eq(boolean condition, KProperty<?> 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);
}
/* ****************************************** **/

View File

@ -13,16 +13,12 @@ import java.util.Map;
@SuppressWarnings("unused")
public interface Compare<Children> extends Serializable {
/**
* ignore
*/
default Children allEq(Map<KProperty<?>,?> params) {
default Children allEq(Map<KProperty<?>, ?> params) {
return allEq(params, true);
}
/**
* ignore
*/
default Children allEq(Map<KProperty<?>, ?> params, boolean null2IsNull) {
return allEq(true, params, null2IsNull);
}
@ -38,12 +34,16 @@ public interface Compare<Children> extends Serializable {
Children allEq(boolean condition, Map<KProperty<?>, ?> params, boolean null2IsNull);
/**
* ignore
*/
@SuppressWarnings("UnusedReturnValue")
default Children eq(KProperty<?> column, Object val) {
return eq(true, column, 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<Children> 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);
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<Children> 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);
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<Children> 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);
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<Children> 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);
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<Children> 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<Children> 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);
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<Children> 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);
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<Children> 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);
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<Children> 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);
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<Children> 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);
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<Children> 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);
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<Children> extends Serializable {
* @param val
* @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>
* copy {@link com.baomidou.mybatisplus.core.conditions.interfaces.Func}
*/
@SuppressWarnings({"unused", "JavadocDeclaration"})
@SuppressWarnings("unused")
public interface Func<Children> 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<Children> 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<Children> 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<Children> 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<Children> 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<Children> 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<Children> 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<Children> 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<Children> extends Serializable {
* @param inValue sql语句 ---&gt; 1,2,3,4,5,6 或者 select id from table where id &lt; 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);
}
/**
* 字段 &gt; ( sql语句 )
* <p>例1: gtSql("id", "1, 2, 3, 4, 5, 6")</p>
* <p>例1: gtSql("id", "select id from table where name = 'JunJun'")</p>
*
* @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<Children> extends Serializable {
* <p>例1: geSql("id", "1, 2, 3, 4, 5, 6")</p>
* <p>例1: geSql("id", "select id from table where name = 'JunJun'")</p>
*
* @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<Children> extends Serializable {
* <p>例1: ltSql("id", "1, 2, 3, 4, 5, 6")</p>
* <p>例1: ltSql("id", "select id from table where name = 'JunJun'")</p>
*
* @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<Children> extends Serializable {
* <p>例1: leSql("id", "1, 2, 3, 4, 5, 6")</p>
* <p>例1: leSql("id", "select id from table where name = 'JunJun'")</p>
*
* @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<KProperty<?>> column) {
return groupBy(true, column);
return groupBy(true, null, column);
}
/**
* ignore
*/
Children groupBy(boolean condition, List<KProperty<?>> columns);
default Children groupBy(String alias, List<KProperty<?>> 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<KProperty<?>> columns) {
return groupBy(condition, null, 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>
*
* @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<KProperty<?>> columns) {
return orderByAsc(true, columns);
return orderByAsc(true, null, columns);
}
/**
* ignore
*/
Children orderByAsc(boolean condition, List<KProperty<?>> columns);
default Children orderByAsc(String alias, List<KProperty<?>> 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<KProperty<?>> columns) {
return orderByAsc(condition, null, 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>
*
* @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<KProperty<?>> columns) {
return orderByDesc(true, columns);
return orderByDesc(true, null, columns);
}
/**
* ignore
*/
Children orderByDesc(boolean condition, List<KProperty<?>> columns);
default Children orderByDesc(String alias, List<KProperty<?>> 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<KProperty<?>> columns) {
return orderByDesc(condition, null, 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>
*
* @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<Children> 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<Children> extends Serializable {
*/
Children having(boolean condition, String sqlHaving, Object... params);
/**
* ignore
*/
default Children func(Consumer<Children> consumer) {
return func(true, consumer);
}

View File

@ -14,11 +14,33 @@ import java.io.Serializable;
*/
@SuppressWarnings("unused")
public interface OnCompare<Children> 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<Children> 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<Children> 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<Children> 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<Children> 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<Children> 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<Children> 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);
}

View File

@ -26,6 +26,17 @@ public interface QueryJoin<Children, Entity> extends MPJBaseJoin<Entity>, 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 多条件
* <p>
@ -72,6 +83,17 @@ public interface QueryJoin<Children, Entity> extends MPJBaseJoin<Entity>, 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 多条件
* <p>
@ -114,6 +136,13 @@ public interface QueryJoin<Children, Entity> extends MPJBaseJoin<Entity>, 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<Children, Entity> extends MPJBaseJoin<Entity>, 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<Children, Entity> extends MPJBaseJoin<Entity>, 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<Children, Entity> extends MPJBaseJoin<Entity>, 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<Children, Entity> extends MPJBaseJoin<Entity>, 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<Children, Entity> extends MPJBaseJoin<Entity>, 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<Children, Entity> extends MPJBaseJoin<Entity>, 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));
}
/**
* 自定义连表关键词
* <p>
@ -333,6 +405,13 @@ public interface QueryJoin<Children, Entity> extends MPJBaseJoin<Entity>, String
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>

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
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<String> 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<String> 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);
}
}

View File

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