!288 refactor:提取公共接口,添加更多动态条件构建。

Merge pull request !288 from 王帅/main
This commit is contained in:
Michael Yang 2023-08-16 14:08:35 +00:00 committed by Gitee
commit 9a75798d22
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
12 changed files with 2756 additions and 994 deletions

View File

@ -15,14 +15,13 @@
*/ */
package com.mybatisflex.core.activerecord.query; package com.mybatisflex.core.activerecord.query;
import com.mybatisflex.core.query.CPI; import com.mybatisflex.core.query.*;
import com.mybatisflex.core.query.QueryColumn;
import com.mybatisflex.core.query.SqlConnector;
import com.mybatisflex.core.util.LambdaGetter; import com.mybatisflex.core.util.LambdaGetter;
import com.mybatisflex.core.util.LambdaUtil; import com.mybatisflex.core.util.LambdaUtil;
import java.util.Collection; import java.util.Collection;
import java.util.function.BiPredicate; import java.util.function.BiPredicate;
import java.util.function.BooleanSupplier;
import java.util.function.Predicate; import java.util.function.Predicate;
/** /**
@ -31,7 +30,7 @@ import java.util.function.Predicate;
* @author 王帅 * @author 王帅
* @since 2023-07-24 * @since 2023-07-24
*/ */
public class WhereBuilder<R extends QueryModel<R>> { public class WhereBuilder<R extends QueryModel<R>> implements Conditional<R> {
private final R queryModel; private final R queryModel;
private final QueryColumn queryColumn; private final QueryColumn queryColumn;
@ -43,368 +42,661 @@ public class WhereBuilder<R extends QueryModel<R>> {
this.connector = connector; this.connector = connector;
} }
private void addWhereQueryCondition(QueryCondition queryCondition) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryCondition, connector);
}
@Override
public R eq(Object value) { public R eq(Object value) {
if (value != null) { addWhereQueryCondition(queryColumn.eq(value));
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.eq(value), connector);
}
return queryModel; return queryModel;
} }
public <T> R eq(T value, Predicate<T> when) { @Override
if (value != null) { public R eq(Object value, boolean isEffective) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.eq(value, when), connector); addWhereQueryCondition(queryColumn.eq(value, isEffective));
}
return queryModel; return queryModel;
} }
@Override
public R eq(Object value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.eq(value, isEffective));
return queryModel;
}
@Override
public <T> R eq(T value, Predicate<T> isEffective) {
addWhereQueryCondition(queryColumn.eq(value, isEffective));
return queryModel;
}
/**
* 等于 {@code =}
*/
public <T> R eq(LambdaGetter<T> value) { public <T> R eq(LambdaGetter<T> value) {
return eq(LambdaUtil.getQueryColumn(value)); return eq(LambdaUtil.getQueryColumn(value), true);
} }
/** /**
* @deprecated {@link Predicate} 泛型参数无效 * 等于 {@code =}
*/ */
@Deprecated public <T> R eq(LambdaGetter<T> value, boolean isEffective) {
public <T> R eq(LambdaGetter<T> value, Predicate<T> when) { return eq(LambdaUtil.getQueryColumn(value), isEffective);
if (value != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.eq(LambdaUtil.getQueryColumn(value)).when(when), connector);
}
return queryModel;
} }
/**
* 等于 {@code =}
*/
public <T> R eq(LambdaGetter<T> value, BooleanSupplier isEffective) {
return eq(LambdaUtil.getQueryColumn(value), isEffective.getAsBoolean());
}
@Override
public R ne(Object value) { public R ne(Object value) {
if (value != null) { addWhereQueryCondition(queryColumn.ne(value));
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.ne(value), connector);
}
return queryModel; return queryModel;
} }
public <T> R ne(T value, Predicate<T> when) { @Override
if (value != null) { public R ne(Object value, boolean isEffective) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.ne(value, when), connector); addWhereQueryCondition(queryColumn.ne(value, isEffective));
}
return queryModel; return queryModel;
} }
@Override
public R ne(Object value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.ne(value, isEffective));
return queryModel;
}
@Override
public <T> R ne(T value, Predicate<T> isEffective) {
addWhereQueryCondition(queryColumn.ne(value, isEffective));
return queryModel;
}
/**
* 不等于 {@code !=}
*/
public <T> R ne(LambdaGetter<T> value) { public <T> R ne(LambdaGetter<T> value) {
return ne(LambdaUtil.getQueryColumn(value)); return ne(LambdaUtil.getQueryColumn(value), true);
} }
/** /**
* @deprecated {@link Predicate} 泛型参数无效 * 不等于 {@code !=}
*/ */
@Deprecated public <T> R ne(LambdaGetter<T> value, boolean isEffective) {
public <T> R ne(LambdaGetter<T> value, Predicate<T> when) { return ne(LambdaUtil.getQueryColumn(value), isEffective);
if (value != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.ne(LambdaUtil.getQueryColumn(value)).when(when), connector);
}
return queryModel;
} }
public R like(Object value) { /**
if (value != null) { * 不等于 {@code !=}
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.like(value), connector); */
} public <T> R ne(LambdaGetter<T> value, BooleanSupplier isEffective) {
return queryModel; return ne(LambdaUtil.getQueryColumn(value), isEffective.getAsBoolean());
}
public <T> R like(T value, Predicate<T> when) {
if (value != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.like(value, when), connector);
}
return queryModel;
}
public R likeLeft(Object value) {
if (value != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.likeLeft(value), connector);
}
return queryModel;
}
public <T> R likeLeft(T value, Predicate<T> when) {
if (value != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.likeLeft(value, when), connector);
}
return queryModel;
}
public R likeRight(Object value) {
if (value != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.likeRight(value), connector);
}
return queryModel;
}
public <T> R likeRight(T value, Predicate<T> when) {
if (value != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.likeRight(value, when), connector);
}
return queryModel;
} }
@Override
public R gt(Object value) { public R gt(Object value) {
if (value != null) { addWhereQueryCondition(queryColumn.gt(value));
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.gt(value), connector);
}
return queryModel; return queryModel;
} }
public <T> R gt(T value, Predicate<T> when) { @Override
if (value != null) { public R gt(Object value, boolean isEffective) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.gt(value, when), connector); addWhereQueryCondition(queryColumn.gt(value, isEffective));
}
return queryModel; return queryModel;
} }
@Override
public R gt(Object value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.gt(value, isEffective));
return queryModel;
}
@Override
public <T> R gt(T value, Predicate<T> isEffective) {
addWhereQueryCondition(queryColumn.gt(value, isEffective));
return queryModel;
}
/**
* 大于 {@code >}
*/
public <T> R gt(LambdaGetter<T> value) { public <T> R gt(LambdaGetter<T> value) {
return gt(LambdaUtil.getQueryColumn(value)); return gt(LambdaUtil.getQueryColumn(value), true);
} }
/** /**
* @deprecated {@link Predicate} 泛型参数无效 * 大于 {@code >}
*/ */
@Deprecated public <T> R gt(LambdaGetter<T> value, boolean isEffective) {
public <T> R gt(LambdaGetter<T> value, Predicate<T> when) { return gt(LambdaUtil.getQueryColumn(value), isEffective);
if (value != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.gt(LambdaUtil.getQueryColumn(value)).when(when), connector);
}
return queryModel;
} }
/**
* 大于 {@code >}
*/
public <T> R gt(LambdaGetter<T> value, BooleanSupplier isEffective) {
return gt(LambdaUtil.getQueryColumn(value), isEffective.getAsBoolean());
}
@Override
public R ge(Object value) { public R ge(Object value) {
if (value != null) { addWhereQueryCondition(queryColumn.ge(value));
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.ge(value), connector);
}
return queryModel; return queryModel;
} }
public <T> R ge(T value, Predicate<T> when) { @Override
if (value != null) { public R ge(Object value, boolean isEffective) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.ge(value, when), connector); addWhereQueryCondition(queryColumn.ge(value, isEffective));
}
return queryModel; return queryModel;
} }
@Override
public R ge(Object value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.ge(value, isEffective));
return queryModel;
}
@Override
public <T> R ge(T value, Predicate<T> isEffective) {
addWhereQueryCondition(queryColumn.ge(value, isEffective));
return queryModel;
}
/**
* 大于等于 {@code >=}
*/
public <T> R ge(LambdaGetter<T> value) { public <T> R ge(LambdaGetter<T> value) {
return ge(LambdaUtil.getQueryColumn(value)); return eq(LambdaUtil.getQueryColumn(value), true);
} }
/** /**
* @deprecated {@link Predicate} 泛型参数无效 * 大于等于 {@code >=}
*/ */
@Deprecated public <T> R ge(LambdaGetter<T> value, boolean isEffective) {
public <T> R ge(LambdaGetter<T> value, Predicate<T> when) { return eq(LambdaUtil.getQueryColumn(value), isEffective);
if (value != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.ge(LambdaUtil.getQueryColumn(value)).when(when), connector);
}
return queryModel;
} }
/**
* 大于等于 {@code >=}
*/
public <T> R ge(LambdaGetter<T> value, BooleanSupplier isEffective) {
return ge(LambdaUtil.getQueryColumn(value), isEffective.getAsBoolean());
}
@Override
public R lt(Object value) { public R lt(Object value) {
if (value != null) { addWhereQueryCondition(queryColumn.lt(value));
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.lt(value), connector);
}
return queryModel; return queryModel;
} }
public <T> R lt(T value, Predicate<T> when) { @Override
if (value != null) { public R lt(Object value, boolean isEffective) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.lt(value, when), connector); addWhereQueryCondition(queryColumn.lt(value, isEffective));
}
return queryModel; return queryModel;
} }
@Override
public R lt(Object value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.lt(value, isEffective));
return queryModel;
}
@Override
public <T> R lt(T value, Predicate<T> isEffective) {
addWhereQueryCondition(queryColumn.lt(value, isEffective));
return queryModel;
}
/**
* 小于 {@code <}
*/
public <T> R lt(LambdaGetter<T> value) { public <T> R lt(LambdaGetter<T> value) {
return lt(LambdaUtil.getQueryColumn(value)); return lt(LambdaUtil.getQueryColumn(value), true);
} }
/** /**
* @deprecated {@link Predicate} 泛型参数无效 * 小于 {@code <}
*/ */
@Deprecated public <T> R lt(LambdaGetter<T> value, boolean isEffective) {
public <T> R lt(LambdaGetter<T> value, Predicate<T> when) { return lt(LambdaUtil.getQueryColumn(value), isEffective);
if (value != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.lt(LambdaUtil.getQueryColumn(value)).when(when), connector);
}
return queryModel;
} }
/**
* 小于 {@code <}
*/
public <T> R lt(LambdaGetter<T> value, BooleanSupplier isEffective) {
return lt(LambdaUtil.getQueryColumn(value), isEffective.getAsBoolean());
}
@Override
public R le(Object value) { public R le(Object value) {
if (value != null) { addWhereQueryCondition(queryColumn.le(value));
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.le(value), connector);
}
return queryModel; return queryModel;
} }
public <T> R le(T value, Predicate<T> when) { @Override
if (value != null) { public R le(Object value, boolean isEffective) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.le(value, when), connector); addWhereQueryCondition(queryColumn.le(value, isEffective));
}
return queryModel; return queryModel;
} }
@Override
public R le(Object value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.le(value, isEffective));
return queryModel;
}
@Override
public <T> R le(T value, Predicate<T> isEffective) {
addWhereQueryCondition(queryColumn.le(value, isEffective));
return queryModel;
}
/**
* 小于等于 {@code <=}
*/
public <T> R le(LambdaGetter<T> value) { public <T> R le(LambdaGetter<T> value) {
return le(LambdaUtil.getQueryColumn(value)); return le(LambdaUtil.getQueryColumn(value), true);
} }
/** /**
* @deprecated {@link Predicate} 泛型参数无效 * 小于等于 {@code <=}
*/ */
@Deprecated public <T> R le(LambdaGetter<T> value, boolean isEffective) {
public <T> R le(LambdaGetter<T> value, Predicate<T> when) { return le(LambdaUtil.getQueryColumn(value), isEffective);
if (value != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.le(LambdaUtil.getQueryColumn(value)).when(when), connector);
} }
/**
* 小于等于 {@code <=}
*/
public <T> R le(LambdaGetter<T> value, BooleanSupplier isEffective) {
return le(LambdaUtil.getQueryColumn(value), isEffective.getAsBoolean());
}
@Override
public R in(Object... value) {
addWhereQueryCondition(queryColumn.in(value));
return queryModel; return queryModel;
} }
public R isNull() { @Override
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.isNull(), connector); public R in(Object[] value, boolean isEffective) {
addWhereQueryCondition(queryColumn.in(value, isEffective));
return queryModel;
}
@Override
public R in(Object[] value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.in(value, isEffective));
return queryModel;
}
@Override
public <T> R in(T[] value, Predicate<T[]> isEffective) {
addWhereQueryCondition(queryColumn.in(value, isEffective));
return queryModel;
}
@Override
public R in(Collection<?> value) {
addWhereQueryCondition(queryColumn.in(value));
return queryModel;
}
@Override
public R in(Collection<?> value, boolean isEffective) {
addWhereQueryCondition(queryColumn.in(value, isEffective));
return queryModel;
}
@Override
public R in(Collection<?> value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.in(value, isEffective));
return queryModel;
}
@Override
public <T extends Collection<?>> R in(T value, Predicate<T> isEffective) {
addWhereQueryCondition(queryColumn.in(value, isEffective));
return queryModel;
}
@Override
public R in(QueryWrapper queryWrapper) {
addWhereQueryCondition(queryColumn.in(queryWrapper));
return queryModel;
}
@Override
public R in(QueryWrapper queryWrapper, boolean isEffective) {
addWhereQueryCondition(queryColumn.in(queryWrapper, isEffective));
return queryModel;
}
@Override
public R in(QueryWrapper queryWrapper, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.in(queryWrapper, isEffective));
return queryModel; return queryModel;
} }
/** /**
* @deprecated 无法推断泛型 * {@code IN(value)}
*/ */
@Deprecated public R in(QueryModel<R> queryModel) {
public <T> R isNull(Predicate<T> when) { return in(queryModel, true);
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.isNull(when), connector);
return queryModel;
}
public R isNotNull() {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.isNotNull(), connector);
return queryModel;
} }
/** /**
* @deprecated 无法推断泛型 * {@code IN(value)}
*/ */
@Deprecated public R in(QueryModel<R> queryModel, boolean isEffective) {
public <T> R isNotNull(Predicate<T> when) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.isNotNull(when), connector);
return queryModel;
}
public R in(Object... arrays) {
if (arrays != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.in(arrays), connector);
}
return queryModel;
}
public <T> R in(T[] arrays, Predicate<T[]> when) {
//忽略 QueryWrapper.in("name", null) 的情况
if (arrays != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.in(arrays, when), connector);
}
return queryModel;
}
public R in(R queryModel) {
if (queryModel != null) { if (queryModel != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.in(queryModel), connector); addWhereQueryCondition(queryColumn.in(queryModel.queryWrapper(), isEffective));
} }
return this.queryModel; return this.queryModel;
} }
/** /**
* @deprecated 无法推断泛型 * {@code IN(value)}
*/ */
@Deprecated public R in(QueryModel<R> queryModel, BooleanSupplier isEffective) {
public <T> R in(R queryModel, Predicate<T> when) { return in(queryModel, isEffective.getAsBoolean());
if (queryModel != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.in(queryModel, when), connector);
}
return this.queryModel;
} }
public R in(Collection<?> collection) { @Override
if (queryModel != null) { public R notIn(Object... value) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.in(collection), connector); addWhereQueryCondition(queryColumn.notIn(value));
}
return queryModel; return queryModel;
} }
public <T extends Collection<?>> R in(T collection, Predicate<T> when) { @Override
if (queryModel != null) { public R notIn(Object[] value, boolean isEffective) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.in(collection, when), connector); addWhereQueryCondition(queryColumn.notIn(value, isEffective));
}
return queryModel; return queryModel;
} }
public R notIn(Object... arrays) { @Override
if (queryModel != null) { public R notIn(Object[] value, BooleanSupplier isEffective) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.notIn(arrays), connector); addWhereQueryCondition(queryColumn.notIn(value, isEffective));
}
return queryModel; return queryModel;
} }
public <T> R notIn(T[] arrays, Predicate<T[]> when) { @Override
if (queryModel != null) { public <T> R notIn(T[] value, Predicate<T[]> isEffective) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.notIn(arrays, when), connector); addWhereQueryCondition(queryColumn.notIn(value, isEffective));
}
return queryModel; return queryModel;
} }
public R notIn(Collection<?> collection) { @Override
if (queryModel != null) { public R notIn(Collection<?> value) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.notIn(collection), connector); addWhereQueryCondition(queryColumn.notIn(value));
}
return queryModel; return queryModel;
} }
public <T extends Collection<?>> R notIn(T collection, Predicate<T> when) { @Override
if (queryModel != null) { public R notIn(Collection<?> value, boolean isEffective) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.notIn(collection, when), connector); addWhereQueryCondition(queryColumn.notIn(value, isEffective));
}
return queryModel; return queryModel;
} }
public R notIn(R queryModel) { @Override
public R notIn(Collection<?> value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.notIn(value, isEffective));
return queryModel;
}
@Override
public <T extends Collection<?>> R notIn(T value, Predicate<T> isEffective) {
addWhereQueryCondition(queryColumn.notIn(value, isEffective));
return queryModel;
}
@Override
public R notIn(QueryWrapper queryWrapper) {
addWhereQueryCondition(queryColumn.notIn(queryWrapper));
return queryModel;
}
@Override
public R notIn(QueryWrapper queryWrapper, boolean isEffective) {
addWhereQueryCondition(queryColumn.notIn(queryWrapper, isEffective));
return queryModel;
}
@Override
public R notIn(QueryWrapper queryWrapper, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.notIn(queryWrapper, isEffective));
return queryModel;
}
/**
* {@code NOT IN(value)}
*/
public R notIn(QueryModel<R> queryModel) {
return notIn(queryModel, true);
}
/**
* {@code NOT IN(value)}
*/
public R notIn(QueryModel<R> queryModel, boolean isEffective) {
if (queryModel != null) { if (queryModel != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.notIn(queryModel), connector); addWhereQueryCondition(queryColumn.notIn(queryModel.queryWrapper(), isEffective));
} }
return this.queryModel; return this.queryModel;
} }
/** /**
* @deprecated 无法推断泛型 * {@code NOT IN(value)}
*/ */
@Deprecated public R notIn(QueryModel<R> queryModel, BooleanSupplier isEffective) {
public <T> R notIn(R queryModel, Predicate<T> when) { return notIn(queryModel, isEffective.getAsBoolean());
if (queryModel != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.notIn(queryModel, when), connector);
}
return this.queryModel;
} }
@Override
public R between(Object start, Object end) { public R between(Object start, Object end) {
if (queryModel != null) { addWhereQueryCondition(queryColumn.between(start, end));
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.between(start, end), connector);
}
return queryModel; return queryModel;
} }
public <S, E> R between(S start, E end, BiPredicate<S, E> when) { @Override
if (queryModel != null) { public R between(Object start, Object end, boolean isEffective) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.between(start, end, when), connector); addWhereQueryCondition(queryColumn.between(start, end, isEffective));
}
return queryModel; return queryModel;
} }
@Override
public R between(Object start, Object end, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.between(start, end, isEffective));
return queryModel;
}
@Override
public <S, E> R between(S start, E end, BiPredicate<S, E> isEffective) {
addWhereQueryCondition(queryColumn.between(start, end, isEffective));
return queryModel;
}
@Override
public R notBetween(Object start, Object end) { public R notBetween(Object start, Object end) {
if (queryModel != null) { addWhereQueryCondition(queryColumn.notBetween(start, end));
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.notBetween(start, end), connector);
}
return queryModel; return queryModel;
} }
public <S, E> R notBetween(S start, E end, BiPredicate<S, E> when) { @Override
if (queryModel != null) { public R notBetween(Object start, Object end, boolean isEffective) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.notBetween(start, end, when), connector); addWhereQueryCondition(queryColumn.notBetween(start, end, isEffective));
return queryModel;
} }
@Override
public R notBetween(Object start, Object end, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.notBetween(start, end, isEffective));
return queryModel;
}
@Override
public <S, E> R notBetween(S start, E end, BiPredicate<S, E> isEffective) {
addWhereQueryCondition(queryColumn.notBetween(start, end, isEffective));
return queryModel;
}
@Override
public R like(Object value) {
addWhereQueryCondition(queryColumn.like(value));
return queryModel;
}
@Override
public R like(Object value, boolean isEffective) {
addWhereQueryCondition(queryColumn.like(value, isEffective));
return queryModel;
}
@Override
public R like(Object value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.like(value, isEffective));
return queryModel;
}
@Override
public <T> R like(T value, Predicate<T> isEffective) {
addWhereQueryCondition(queryColumn.like(value, isEffective));
return queryModel;
}
@Override
public R likeLeft(Object value) {
addWhereQueryCondition(queryColumn.likeLeft(value));
return queryModel;
}
@Override
public R likeLeft(Object value, boolean isEffective) {
addWhereQueryCondition(queryColumn.likeLeft(value, isEffective));
return queryModel;
}
@Override
public R likeLeft(Object value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.likeLeft(value, isEffective));
return queryModel;
}
@Override
public <T> R likeLeft(T value, Predicate<T> isEffective) {
addWhereQueryCondition(queryColumn.likeLeft(value, isEffective));
return queryModel;
}
@Override
public R likeRight(Object value) {
addWhereQueryCondition(queryColumn.likeRight(value));
return queryModel;
}
@Override
public R likeRight(Object value, boolean isEffective) {
addWhereQueryCondition(queryColumn.likeRight(value, isEffective));
return queryModel;
}
@Override
public R likeRight(Object value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.likeRight(value, isEffective));
return queryModel;
}
@Override
public <T> R likeRight(T value, Predicate<T> isEffective) {
addWhereQueryCondition(queryColumn.likeRight(value, isEffective));
return queryModel;
}
@Override
public R notLike(Object value) {
addWhereQueryCondition(queryColumn.notLike(value));
return queryModel;
}
@Override
public R notLike(Object value, boolean isEffective) {
addWhereQueryCondition(queryColumn.notLike(value, isEffective));
return queryModel;
}
@Override
public R notLike(Object value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.notLike(value, isEffective));
return queryModel;
}
@Override
public <T> R notLike(T value, Predicate<T> isEffective) {
addWhereQueryCondition(queryColumn.notLike(value, isEffective));
return queryModel;
}
@Override
public R notLikeLeft(Object value) {
addWhereQueryCondition(queryColumn.notLikeLeft(value));
return queryModel;
}
@Override
public R notLikeLeft(Object value, boolean isEffective) {
addWhereQueryCondition(queryColumn.notLikeLeft(value, isEffective));
return queryModel;
}
@Override
public R notLikeLeft(Object value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.notLikeLeft(value, isEffective));
return queryModel;
}
@Override
public <T> R notLikeLeft(T value, Predicate<T> isEffective) {
addWhereQueryCondition(queryColumn.notLikeLeft(value, isEffective));
return queryModel;
}
@Override
public R notLikeRight(Object value) {
addWhereQueryCondition(queryColumn.notLikeRight(value));
return queryModel;
}
@Override
public R notLikeRight(Object value, boolean isEffective) {
addWhereQueryCondition(queryColumn.notLikeRight(value, isEffective));
return queryModel;
}
@Override
public R notLikeRight(Object value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.notLikeRight(value, isEffective));
return queryModel;
}
@Override
public <T> R notLikeRight(T value, Predicate<T> isEffective) {
addWhereQueryCondition(queryColumn.notLikeRight(value, isEffective));
return queryModel;
}
@Override
public R isNull(boolean isEffective) {
addWhereQueryCondition(queryColumn.isNull(isEffective));
return queryModel;
}
@Override
public R isNotNull(boolean isEffective) {
addWhereQueryCondition(queryColumn.isNotNull(isEffective));
return queryModel; return queryModel;
} }

View File

@ -41,6 +41,9 @@ public enum SqlOperator {
// = // =
EQUALS(SqlConsts.EQUALS), EQUALS(SqlConsts.EQUALS),
// !=
NOT_EQUALS(SqlConsts.NOT_EQUALS),
// is null // is null
IS_NULL(SqlConsts.IS_NULL), IS_NULL(SqlConsts.IS_NULL),
@ -70,4 +73,5 @@ public enum SqlOperator {
public String getValue() { public String getValue() {
return value; return value;
} }
} }

View File

@ -20,8 +20,6 @@ import com.mybatisflex.core.util.ObjectUtil;
import com.mybatisflex.core.util.StringUtil; import com.mybatisflex.core.util.StringUtil;
import java.util.List; import java.util.List;
import java.util.function.BooleanSupplier;
import java.util.function.Predicate;
/** /**
* 括号 * 括号
@ -59,25 +57,6 @@ public class Brackets extends QueryCondition {
childCondition.setLogic(logic); childCondition.setLogic(logic);
} }
@Override
public QueryCondition when(boolean effective) {
return childCondition.when(effective);
}
@Override
public QueryCondition when(BooleanSupplier fn) {
return childCondition.when(fn);
}
/**
* @deprecated 继承自标记删除的方法
*/
@Override
@Deprecated
public <T> QueryCondition when(Predicate<T> fn) {
return childCondition.when(fn);
}
@Override @Override
protected QueryCondition getNextEffectiveCondition() { protected QueryCondition getNextEffectiveCondition() {
return childCondition.getNextEffectiveCondition(); return childCondition.getNextEffectiveCondition();

View File

@ -0,0 +1,692 @@
/*
* Copyright (c) 2022-2023, Mybatis-Flex (fuhai999@gmail.com).
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.mybatisflex.core.query;
import java.util.Collection;
import java.util.function.BiPredicate;
import java.util.function.BooleanSupplier;
import java.util.function.Predicate;
/**
* 动态条件查询接口
*
* @param <R> 链式调用返回值类型
* @author 王帅
* @since 2023-08-12
*/
@SuppressWarnings("unused")
public interface Conditional<R> {
/**
* 等于 {@code =}
*
* @param value 条件的值
*/
R eq(Object value);
/**
* 等于 {@code =}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R eq(Object value, boolean isEffective);
/**
* 等于 {@code =}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R eq(Object value, BooleanSupplier isEffective);
/**
* 等于 {@code =}
*
* @param value 条件的值
* @param isEffective 是否生效
*/
<T> R eq(T value, Predicate<T> isEffective);
/**
* 不等于 {@code !=}
*
* @param value 条件的值
*/
R ne(Object value);
/**
* 不等于 {@code !=}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R ne(Object value, boolean isEffective);
/**
* 不等于 {@code !=}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R ne(Object value, BooleanSupplier isEffective);
/**
* 不等于 {@code !=}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
<T> R ne(T value, Predicate<T> isEffective);
/**
* 大于 {@code >}
*
* @param value 条件的值
*/
R gt(Object value);
/**
* 大于 {@code >}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R gt(Object value, boolean isEffective);
/**
* 大于 {@code >}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R gt(Object value, BooleanSupplier isEffective);
/**
* 大于 {@code >}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
<T> R gt(T value, Predicate<T> isEffective);
/**
* 大于等于 {@code >=}
*
* @param value 条件的值
*/
R ge(Object value);
/**
* 大于等于 {@code >=}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R ge(Object value, boolean isEffective);
/**
* 大于等于 {@code >=}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R ge(Object value, BooleanSupplier isEffective);
/**
* 大于等于 {@code >=}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
<T> R ge(T value, Predicate<T> isEffective);
/**
* 小于 {@code <}
*
* @param value 条件的值
*/
R lt(Object value);
/**
* 小于 {@code <}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R lt(Object value, boolean isEffective);
/**
* 小于 {@code <}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R lt(Object value, BooleanSupplier isEffective);
/**
* 小于 {@code <}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
<T> R lt(T value, Predicate<T> isEffective);
/**
* 小于等于 {@code <=}
*
* @param value 条件的值
*/
R le(Object value);
/**
* 小于等于 {@code <=}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R le(Object value, boolean isEffective);
/**
* 小于等于 {@code <=}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R le(Object value, BooleanSupplier isEffective);
/**
* 小于等于 {@code <=}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
<T> R le(T value, Predicate<T> isEffective);
/**
* {@code IN(value)}
*
* @param value 条件的值
*/
R in(Object... value);
/**
* {@code IN(value)}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R in(Object[] value, boolean isEffective);
/**
* {@code IN(value)}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R in(Object[] value, BooleanSupplier isEffective);
/**
* {@code IN(value)}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
<T> R in(T[] value, Predicate<T[]> isEffective);
/**
* {@code IN(value)}
*
* @param value 条件的值
*/
R in(Collection<?> value);
/**
* {@code IN(value)}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R in(Collection<?> value, boolean isEffective);
/**
* {@code IN(value)}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R in(Collection<?> value, BooleanSupplier isEffective);
/**
* {@code IN(value)}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
<T extends Collection<?>> R in(T value, Predicate<T> isEffective);
/**
* {@code IN(value)}
*
* @param queryWrapper 子查询值
*/
R in(QueryWrapper queryWrapper);
/**
* {@code IN(value)}
*
* @param queryWrapper 子查询值
* @param isEffective 是否有效
*/
R in(QueryWrapper queryWrapper, boolean isEffective);
/**
* {@code IN(value)}
*
* @param queryWrapper 子查询值
* @param isEffective 是否有效
*/
R in(QueryWrapper queryWrapper, BooleanSupplier isEffective);
/**
* {@code NOT IN(value)}
*
* @param value 条件的值
*/
R notIn(Object... value);
/**
* {@code NOT IN(value)}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R notIn(Object[] value, boolean isEffective);
/**
* {@code NOT IN(value)}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R notIn(Object[] value, BooleanSupplier isEffective);
/**
* {@code NOT IN(value)}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
<T> R notIn(T[] value, Predicate<T[]> isEffective);
/**
* {@code NOT IN(value)}
*
* @param value 条件的值
*/
R notIn(Collection<?> value);
/**
* {@code NOT IN(value)}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R notIn(Collection<?> value, boolean isEffective);
/**
* {@code NOT IN(value)}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R notIn(Collection<?> value, BooleanSupplier isEffective);
/**
* {@code NOT IN(value)}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
<T extends Collection<?>> R notIn(T value, Predicate<T> isEffective);
/**
* {@code NOT IN(value)}
*
* @param queryWrapper 子查询值
*/
R notIn(QueryWrapper queryWrapper);
/**
* {@code NOT IN(value)}
*
* @param queryWrapper 子查询值
* @param isEffective 是否有效
*/
R notIn(QueryWrapper queryWrapper, boolean isEffective);
/**
* {@code NOT IN(value)}
*
* @param queryWrapper 子查询值
* @param isEffective 是否有效
*/
R notIn(QueryWrapper queryWrapper, BooleanSupplier isEffective);
/**
* {@code BETWEEN start AND end}
*
* @param start 开始的值
* @param end 结束的值
*/
R between(Object start, Object end);
/**
* {@code BETWEEN start AND end}
*
* @param start 开始的值
* @param end 结束的值
* @param isEffective 是否有效
*/
R between(Object start, Object end, boolean isEffective);
/**
* {@code BETWEEN start AND end}
*
* @param start 开始的值
* @param end 结束的值
* @param isEffective 是否有效
*/
R between(Object start, Object end, BooleanSupplier isEffective);
/**
* {@code BETWEEN start AND end}
*
* @param start 开始的值
* @param end 结束的值
* @param isEffective 是否有效
*/
<S, E> R between(S start, E end, BiPredicate<S, E> isEffective);
/**
* {@code NOT BETWEEN start AND end}
*
* @param start 开始的值
* @param end 结束的值
*/
R notBetween(Object start, Object end);
/**
* {@code NOT BETWEEN start AND end}
*
* @param start 开始的值
* @param end 结束的值
* @param isEffective 是否有效
*/
R notBetween(Object start, Object end, boolean isEffective);
/**
* {@code NOT BETWEEN start AND end}
*
* @param start 开始的值
* @param end 结束的值
* @param isEffective 是否有效
*/
R notBetween(Object start, Object end, BooleanSupplier isEffective);
/**
* {@code NOT BETWEEN start AND end}
*
* @param start 开始的值
* @param end 结束的值
* @param isEffective 是否有效
*/
<S, E> R notBetween(S start, E end, BiPredicate<S, E> isEffective);
/**
* {@code LIKE %value%}
*
* @param value 条件的值
*/
R like(Object value);
/**
* {@code LIKE %value%}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R like(Object value, boolean isEffective);
/**
* {@code LIKE %value%}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R like(Object value, BooleanSupplier isEffective);
/**
* {@code LIKE %value%}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
<T> R like(T value, Predicate<T> isEffective);
/**
* {@code LIKE value%}
*
* @param value 条件的值
*/
R likeLeft(Object value);
/**
* {@code LIKE value%}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R likeLeft(Object value, boolean isEffective);
/**
* {@code LIKE value%}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R likeLeft(Object value, BooleanSupplier isEffective);
/**
* {@code LIKE value%}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
<T> R likeLeft(T value, Predicate<T> isEffective);
/**
* {@code LIKE %value}
*
* @param value 条件的值
*/
R likeRight(Object value);
/**
* {@code LIKE %value}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R likeRight(Object value, boolean isEffective);
/**
* {@code LIKE %value}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R likeRight(Object value, BooleanSupplier isEffective);
/**
* {@code LIKE %value}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
<T> R likeRight(T value, Predicate<T> isEffective);
/**
* {@code NOT LIKE %value%}
*
* @param value 条件的值
*/
R notLike(Object value);
/**
* {@code NOT LIKE %value%}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R notLike(Object value, boolean isEffective);
/**
* {@code NOT LIKE %value%}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R notLike(Object value, BooleanSupplier isEffective);
/**
* {@code NOT LIKE %value%}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
<T> R notLike(T value, Predicate<T> isEffective);
/**
* {@code NOT LIKE value%}
*
* @param value 条件的值
*/
R notLikeLeft(Object value);
/**
* {@code NOT LIKE value%}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R notLikeLeft(Object value, boolean isEffective);
/**
* {@code NOT LIKE value%}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R notLikeLeft(Object value, BooleanSupplier isEffective);
/**
* {@code NOT LIKE value%}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
<T> R notLikeLeft(T value, Predicate<T> isEffective);
/**
* {@code NOT LIKE %value}
*
* @param value 条件的值
*/
R notLikeRight(Object value);
/**
* {@code NOT LIKE %value}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R notLikeRight(Object value, boolean isEffective);
/**
* {@code NOT LIKE %value}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
R notLikeRight(Object value, BooleanSupplier isEffective);
/**
* {@code NOT LIKE %value}
*
* @param value 条件的值
* @param isEffective 是否有效
*/
<T> R notLikeRight(T value, Predicate<T> isEffective);
/**
* {@code IS NULL}
*/
default R isNull() {
return isNull(true);
}
/**
* {@code IS NULL}
*
* @param isEffective 是否有效
*/
R isNull(boolean isEffective);
/**
* {@code IS NULL}
*
* @param isEffective 是否有效
*/
default R isNull(BooleanSupplier isEffective) {
return isNull(isEffective.getAsBoolean());
}
/**
* {@code IS NOT NULL}
*/
default R isNotNull() {
return isNotNull(true);
}
/**
* {@code IS NOT NULL}
*
* @param isEffective 是否有效
*/
R isNotNull(boolean isEffective);
/**
* {@code IS NOT NULL}
*
* @param isEffective 是否有效
*/
default R isNotNull(BooleanSupplier isEffective) {
return isNotNull(isEffective.getAsBoolean());
}
}

View File

@ -17,6 +17,7 @@ package com.mybatisflex.core.query;
import com.mybatisflex.core.constant.SqlConsts; import com.mybatisflex.core.constant.SqlConsts;
import com.mybatisflex.core.constant.SqlOperator;
import com.mybatisflex.core.dialect.IDialect; import com.mybatisflex.core.dialect.IDialect;
import com.mybatisflex.core.exception.FlexExceptions; import com.mybatisflex.core.exception.FlexExceptions;
import com.mybatisflex.core.util.ClassUtil; import com.mybatisflex.core.util.ClassUtil;
@ -70,7 +71,12 @@ public class QueryCondition implements CloneSupport<QueryCondition> {
return condition; return condition;
} }
public QueryCondition() { public static QueryCondition create(QueryColumn queryColumn, SqlOperator logic, Object value) {
QueryCondition condition = new QueryCondition();
condition.setColumn(queryColumn);
condition.setLogic(logic.getValue());
condition.setValue(value);
return condition;
} }
public QueryColumn getColumn() { public QueryColumn getColumn() {

View File

@ -20,9 +20,10 @@ import com.mybatisflex.core.util.LambdaUtil;
import java.util.Collection; import java.util.Collection;
import java.util.function.BiPredicate; import java.util.function.BiPredicate;
import java.util.function.BooleanSupplier;
import java.util.function.Predicate; import java.util.function.Predicate;
public class QueryConditionBuilder<Wrapper extends QueryWrapper> { public class QueryConditionBuilder<Wrapper extends QueryWrapper> implements Conditional<Wrapper> {
private final Wrapper queryWrapper; private final Wrapper queryWrapper;
private final QueryColumn queryColumn; private final QueryColumn queryColumn;
@ -35,479 +36,614 @@ public class QueryConditionBuilder<Wrapper extends QueryWrapper> {
this.connector = connector; this.connector = connector;
} }
/** private void addWhereQueryCondition(QueryCondition queryCondition) {
* equals queryWrapper.addWhereQueryCondition(queryCondition, connector);
* }
* @param value
*/ @Override
public Wrapper eq(Object value) { public Wrapper eq(Object value) {
if (value != null) { addWhereQueryCondition(queryColumn.eq(value));
queryWrapper.addWhereQueryCondition(queryColumn.eq(value), connector);
}
return queryWrapper; return queryWrapper;
} }
@Override
public <T> Wrapper eq(T value, Predicate<T> when) { public Wrapper eq(Object value, boolean isEffective) {
if (value != null) { addWhereQueryCondition(queryColumn.eq(value, isEffective));
queryWrapper.addWhereQueryCondition(queryColumn.eq(value, when), connector);
}
return queryWrapper; return queryWrapper;
} }
@Override
public Wrapper eq(Object value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.eq(value, isEffective));
return queryWrapper;
}
@Override
public <T> Wrapper eq(T value, Predicate<T> isEffective) {
addWhereQueryCondition(queryColumn.eq(value, isEffective));
return queryWrapper;
}
/**
* 等于 {@code =}
*/
public <T> Wrapper eq(LambdaGetter<T> value) { public <T> Wrapper eq(LambdaGetter<T> value) {
return eq(LambdaUtil.getQueryColumn(value)); return eq(LambdaUtil.getQueryColumn(value), true);
} }
/** /**
* @deprecated {@link Predicate} 泛型参数无效 * 等于 {@code =}
*/ */
@Deprecated public <T> Wrapper eq(LambdaGetter<T> value, boolean isEffective) {
public <T> Wrapper eq(LambdaGetter<T> value, Predicate<T> when) { return eq(LambdaUtil.getQueryColumn(value), isEffective);
if (value != null) {
queryWrapper.addWhereQueryCondition(queryColumn.eq(value).when(when), connector);
} }
return queryWrapper;
}
/** /**
* not equals != * 等于 {@code =}
*
* @param value
*/ */
public <T> Wrapper eq(LambdaGetter<T> value, BooleanSupplier isEffective) {
return eq(LambdaUtil.getQueryColumn(value), isEffective.getAsBoolean());
}
@Override
public Wrapper ne(Object value) { public Wrapper ne(Object value) {
if (value != null) { addWhereQueryCondition(queryColumn.ne(value));
queryWrapper.addWhereQueryCondition(queryColumn.ne(value), connector);
}
return queryWrapper; return queryWrapper;
} }
public <T> Wrapper ne(T value, Predicate<T> when) { @Override
if (value != null) { public Wrapper ne(Object value, boolean isEffective) {
queryWrapper.addWhereQueryCondition(queryColumn.ne(value, when), connector); addWhereQueryCondition(queryColumn.ne(value, isEffective));
}
return queryWrapper; return queryWrapper;
} }
@Override
public Wrapper ne(Object value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.ne(value, isEffective));
return queryWrapper;
}
@Override
public <T> Wrapper ne(T value, Predicate<T> isEffective) {
addWhereQueryCondition(queryColumn.ne(value, isEffective));
return queryWrapper;
}
/**
* 不等于 {@code !=}
*/
public <T> Wrapper ne(LambdaGetter<T> value) { public <T> Wrapper ne(LambdaGetter<T> value) {
return ne(LambdaUtil.getQueryColumn(value)); return ne(LambdaUtil.getQueryColumn(value), true);
}
/**
* @deprecated {@link Predicate} 泛型参数无效
*/
@Deprecated
public <T> Wrapper ne(LambdaGetter<T> value, Predicate<T> when) {
if (value != null) {
queryWrapper.addWhereQueryCondition(queryColumn.ne(value).when(when), connector);
}
return queryWrapper;
}
/**
* like %%
*
* @param value
*/
public Wrapper like(Object value) {
if (value != null) {
queryWrapper.addWhereQueryCondition(queryColumn.like(value), connector);
}
return queryWrapper;
}
public <T> Wrapper like(T value, Predicate<T> when) {
if (value != null) {
queryWrapper.addWhereQueryCondition(queryColumn.like(value, when), connector);
}
return queryWrapper;
}
public Wrapper likeLeft(Object value) {
if (value != null) {
queryWrapper.addWhereQueryCondition(queryColumn.likeLeft(value), connector);
}
return queryWrapper;
}
public <T> Wrapper likeLeft(T value, Predicate<T> when) {
if (value != null) {
queryWrapper.addWhereQueryCondition(queryColumn.likeLeft(value, when), connector);
}
return queryWrapper;
}
public Wrapper likeRight(Object value) {
if (value != null) {
queryWrapper.addWhereQueryCondition(queryColumn.likeRight(value), connector);
}
return queryWrapper;
}
public <T> Wrapper likeRight(T value, Predicate<T> when) {
if (value != null) {
queryWrapper.addWhereQueryCondition(queryColumn.likeRight(value, when), connector);
}
return queryWrapper;
} }
/** /**
* 大于 greater than * 不等于 {@code !=}
*
* @param value
*/ */
public <T> Wrapper ne(LambdaGetter<T> value, boolean isEffective) {
return ne(LambdaUtil.getQueryColumn(value), isEffective);
}
/**
* 不等于 {@code !=}
*/
public <T> Wrapper ne(LambdaGetter<T> value, BooleanSupplier isEffective) {
return ne(LambdaUtil.getQueryColumn(value), isEffective.getAsBoolean());
}
@Override
public Wrapper gt(Object value) { public Wrapper gt(Object value) {
if (value != null) { addWhereQueryCondition(queryColumn.gt(value));
queryWrapper.addWhereQueryCondition(queryColumn.gt(value), connector);
}
return queryWrapper; return queryWrapper;
} }
public <T> Wrapper gt(T value, Predicate<T> when) { @Override
if (value != null) { public Wrapper gt(Object value, boolean isEffective) {
queryWrapper.addWhereQueryCondition(queryColumn.gt(value, when), connector); addWhereQueryCondition(queryColumn.gt(value, isEffective));
}
return queryWrapper; return queryWrapper;
} }
@Override
public Wrapper gt(Object value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.gt(value, isEffective));
return queryWrapper;
}
@Override
public <T> Wrapper gt(T value, Predicate<T> isEffective) {
addWhereQueryCondition(queryColumn.gt(value, isEffective));
return queryWrapper;
}
/**
* 大于 {@code >}
*/
public <T> Wrapper gt(LambdaGetter<T> value) { public <T> Wrapper gt(LambdaGetter<T> value) {
return gt(LambdaUtil.getQueryColumn(value)); return gt(LambdaUtil.getQueryColumn(value), true);
} }
/** /**
* @deprecated {@link Predicate} 泛型参数无效 * 大于 {@code >}
*/ */
@Deprecated public <T> Wrapper gt(LambdaGetter<T> value, boolean isEffective) {
public <T> Wrapper gt(LambdaGetter<T> value, Predicate<T> when) { return gt(LambdaUtil.getQueryColumn(value), isEffective);
if (value != null) {
queryWrapper.addWhereQueryCondition(queryColumn.gt(value).when(when), connector);
} }
return queryWrapper;
}
/** /**
* 大于等于 greater or equal * 大于 {@code >}
*
* @param value
*/ */
public <T> Wrapper gt(LambdaGetter<T> value, BooleanSupplier isEffective) {
return gt(LambdaUtil.getQueryColumn(value), isEffective.getAsBoolean());
}
@Override
public Wrapper ge(Object value) { public Wrapper ge(Object value) {
if (value != null) { addWhereQueryCondition(queryColumn.ge(value));
queryWrapper.addWhereQueryCondition(queryColumn.ge(value), connector);
}
return queryWrapper; return queryWrapper;
} }
public <T> Wrapper ge(T value, Predicate<T> when) { @Override
if (value != null) { public Wrapper ge(Object value, boolean isEffective) {
queryWrapper.addWhereQueryCondition(queryColumn.ge(value, when), connector); addWhereQueryCondition(queryColumn.ge(value, isEffective));
}
return queryWrapper; return queryWrapper;
} }
@Override
public Wrapper ge(Object value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.ge(value, isEffective));
return queryWrapper;
}
@Override
public <T> Wrapper ge(T value, Predicate<T> isEffective) {
addWhereQueryCondition(queryColumn.ge(value, isEffective));
return queryWrapper;
}
/**
* 大于等于 {@code >=}
*/
public <T> Wrapper ge(LambdaGetter<T> value) { public <T> Wrapper ge(LambdaGetter<T> value) {
return ge(LambdaUtil.getQueryColumn(value)); return eq(LambdaUtil.getQueryColumn(value), true);
} }
/** /**
* @deprecated {@link Predicate} 泛型参数无效 * 大于等于 {@code >=}
*/ */
@Deprecated public <T> Wrapper ge(LambdaGetter<T> value, boolean isEffective) {
public <T> Wrapper ge(LambdaGetter<T> value, Predicate<T> when) { return eq(LambdaUtil.getQueryColumn(value), isEffective);
if (value != null) {
queryWrapper.addWhereQueryCondition(queryColumn.ge(value).when(when), connector);
}
return queryWrapper;
} }
/** /**
* 小于 less than * 大于等于 {@code >=}
*
* @param value
*/ */
public <T> Wrapper ge(LambdaGetter<T> value, BooleanSupplier isEffective) {
return ge(LambdaUtil.getQueryColumn(value), isEffective.getAsBoolean());
}
@Override
public Wrapper lt(Object value) { public Wrapper lt(Object value) {
if (value != null) { addWhereQueryCondition(queryColumn.lt(value));
queryWrapper.addWhereQueryCondition(queryColumn.lt(value), connector);
}
return queryWrapper; return queryWrapper;
} }
public <T> Wrapper lt(T value, Predicate<T> when) { @Override
if (value != null) { public Wrapper lt(Object value, boolean isEffective) {
queryWrapper.addWhereQueryCondition(queryColumn.lt(value, when), connector); addWhereQueryCondition(queryColumn.lt(value, isEffective));
}
return queryWrapper; return queryWrapper;
} }
@Override
public Wrapper lt(Object value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.lt(value, isEffective));
return queryWrapper;
}
@Override
public <T> Wrapper lt(T value, Predicate<T> isEffective) {
addWhereQueryCondition(queryColumn.lt(value, isEffective));
return queryWrapper;
}
/**
* 小于 {@code <}
*/
public <T> Wrapper lt(LambdaGetter<T> value) { public <T> Wrapper lt(LambdaGetter<T> value) {
return lt(LambdaUtil.getQueryColumn(value)); return lt(LambdaUtil.getQueryColumn(value), true);
} }
/** /**
* @deprecated {@link Predicate} 泛型参数无效 * 小于 {@code <}
*/ */
@Deprecated public <T> Wrapper lt(LambdaGetter<T> value, boolean isEffective) {
public <T> Wrapper lt(LambdaGetter<T> value, Predicate<T> when) { return lt(LambdaUtil.getQueryColumn(value), isEffective);
if (value != null) {
queryWrapper.addWhereQueryCondition(queryColumn.lt(value).when(when), connector);
}
return queryWrapper;
} }
/** /**
* 小于等于 less or equal * 小于 {@code <}
*
* @param value
*/ */
public <T> Wrapper lt(LambdaGetter<T> value, BooleanSupplier isEffective) {
return lt(LambdaUtil.getQueryColumn(value), isEffective.getAsBoolean());
}
@Override
public Wrapper le(Object value) { public Wrapper le(Object value) {
if (value != null) { addWhereQueryCondition(queryColumn.le(value));
queryWrapper.addWhereQueryCondition(queryColumn.le(value), connector);
}
return queryWrapper; return queryWrapper;
} }
@Override
public <T> Wrapper le(T value, Predicate<T> when) { public Wrapper le(Object value, boolean isEffective) {
if (value != null) { addWhereQueryCondition(queryColumn.le(value, isEffective));
queryWrapper.addWhereQueryCondition(queryColumn.le(value, when), connector);
}
return queryWrapper; return queryWrapper;
} }
@Override
public Wrapper le(Object value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.le(value, isEffective));
return queryWrapper;
}
@Override
public <T> Wrapper le(T value, Predicate<T> isEffective) {
addWhereQueryCondition(queryColumn.le(value, isEffective));
return queryWrapper;
}
/**
* 小于等于 {@code <=}
*/
public <T> Wrapper le(LambdaGetter<T> value) { public <T> Wrapper le(LambdaGetter<T> value) {
return le(LambdaUtil.getQueryColumn(value)); return le(LambdaUtil.getQueryColumn(value), true);
} }
/** /**
* @deprecated {@link Predicate} 泛型参数无效 * 小于等于 {@code <=}
*/ */
@Deprecated public <T> Wrapper le(LambdaGetter<T> value, boolean isEffective) {
public <T> Wrapper le(LambdaGetter<T> value, Predicate<T> when) { return le(LambdaUtil.getQueryColumn(value), isEffective);
if (value != null) {
queryWrapper.addWhereQueryCondition(queryColumn.le(value).when(when), connector);
}
return queryWrapper;
}
/**
* IS NULL
*
* @return
*/
public Wrapper isNull() {
queryWrapper.addWhereQueryCondition(queryColumn.isNull(), connector);
return queryWrapper;
} }
/** /**
* @deprecated 无法推断泛型 * 小于等于 {@code <=}
*/ */
@Deprecated public <T> Wrapper le(LambdaGetter<T> value, BooleanSupplier isEffective) {
public <T> Wrapper isNull(Predicate<T> when) { return le(LambdaUtil.getQueryColumn(value), isEffective.getAsBoolean());
queryWrapper.addWhereQueryCondition(queryColumn.isNull(when), connector); }
@Override
public Wrapper in(Object... value) {
addWhereQueryCondition(queryColumn.in(value));
return queryWrapper; return queryWrapper;
} }
@Override
/** public Wrapper in(Object[] value, boolean isEffective) {
* IS NOT NULL addWhereQueryCondition(queryColumn.in(value, isEffective));
*
* @return
*/
public Wrapper isNotNull() {
queryWrapper.addWhereQueryCondition(queryColumn.isNotNull(), connector);
return queryWrapper; return queryWrapper;
} }
/** @Override
* @deprecated 无法推断泛型 public Wrapper in(Object[] value, BooleanSupplier isEffective) {
*/ addWhereQueryCondition(queryColumn.in(value, isEffective));
@Deprecated
public <T> Wrapper isNotNull(Predicate<T> when) {
queryWrapper.addWhereQueryCondition(queryColumn.isNotNull(when), connector);
return queryWrapper; return queryWrapper;
} }
@Override
/** public <T> Wrapper in(T[] value, Predicate<T[]> isEffective) {
* in arrays addWhereQueryCondition(queryColumn.in(value, isEffective));
*
* @param arrays
* @return
*/
public Wrapper in(Object... arrays) {
if (arrays != null) {
queryWrapper.addWhereQueryCondition(queryColumn.in(arrays), connector);
}
return queryWrapper; return queryWrapper;
} }
public <T> Wrapper in(T[] arrays, Predicate<T[]> when) { @Override
//忽略 QueryWrapper.in("name", null) 的情况 public Wrapper in(Collection<?> value) {
if (arrays != null) { addWhereQueryCondition(queryColumn.in(value));
queryWrapper.addWhereQueryCondition(queryColumn.in(arrays, when), connector);
}
return queryWrapper; return queryWrapper;
} }
/** @Override
* in child select public Wrapper in(Collection<?> value, boolean isEffective) {
* addWhereQueryCondition(queryColumn.in(value, isEffective));
* @param queryWrapper return queryWrapper;
* @return }
*/
@Override
public Wrapper in(Collection<?> value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.in(value, isEffective));
return queryWrapper;
}
@Override
public <T extends Collection<?>> Wrapper in(T value, Predicate<T> isEffective) {
addWhereQueryCondition(queryColumn.in(value, isEffective));
return queryWrapper;
}
@Override
public Wrapper in(QueryWrapper queryWrapper) { public Wrapper in(QueryWrapper queryWrapper) {
if (queryWrapper != null) { addWhereQueryCondition(queryColumn.in(queryWrapper));
this.queryWrapper.addWhereQueryCondition(queryColumn.in(queryWrapper), connector);
}
return this.queryWrapper; return this.queryWrapper;
} }
/** @Override
* @deprecated 无法推断泛型 public Wrapper in(QueryWrapper queryWrapper, boolean isEffective) {
*/ addWhereQueryCondition(queryColumn.in(queryWrapper, isEffective));
@Deprecated
public <T> Wrapper in(QueryWrapper queryWrapper, Predicate<T> when) {
if (queryWrapper != null) {
this.queryWrapper.addWhereQueryCondition(queryColumn.in(queryWrapper, when), connector);
}
return this.queryWrapper; return this.queryWrapper;
} }
@Override
/** public Wrapper in(QueryWrapper queryWrapper, BooleanSupplier isEffective) {
* in Collection addWhereQueryCondition(queryColumn.in(queryWrapper, isEffective));
* return this.queryWrapper;
* @param collection
* @return
*/
public Wrapper in(Collection<?> collection) {
if (queryWrapper != null) {
queryWrapper.addWhereQueryCondition(queryColumn.in(collection), connector);
} }
@Override
public Wrapper notIn(Object... value) {
addWhereQueryCondition(queryColumn.notIn(value));
return queryWrapper; return queryWrapper;
} }
public <T extends Collection<?>> Wrapper in(T collection, Predicate<T> when) { @Override
if (queryWrapper != null) { public Wrapper notIn(Object[] value, boolean isEffective) {
queryWrapper.addWhereQueryCondition(queryColumn.in(collection, when), connector); addWhereQueryCondition(queryColumn.notIn(value, isEffective));
}
return queryWrapper; return queryWrapper;
} }
/** @Override
* not int arrays public Wrapper notIn(Object[] value, BooleanSupplier isEffective) {
* addWhereQueryCondition(queryColumn.notIn(value, isEffective));
* @param arrays
* @return
*/
public Wrapper notIn(Object... arrays) {
if (queryWrapper != null) {
queryWrapper.addWhereQueryCondition(queryColumn.notIn(arrays), connector);
}
return queryWrapper; return queryWrapper;
} }
public <T> Wrapper notIn(T[] arrays, Predicate<T[]> when) { @Override
if (queryWrapper != null) { public <T> Wrapper notIn(T[] value, Predicate<T[]> isEffective) {
queryWrapper.addWhereQueryCondition(queryColumn.notIn(arrays, when), connector); addWhereQueryCondition(queryColumn.notIn(value, isEffective));
}
return queryWrapper; return queryWrapper;
} }
@Override
/** public Wrapper notIn(Collection<?> value) {
* not in Collection addWhereQueryCondition(queryColumn.notIn(value));
*
* @param collection
* @return
*/
public Wrapper notIn(Collection<?> collection) {
if (queryWrapper != null) {
queryWrapper.addWhereQueryCondition(queryColumn.notIn(collection), connector);
}
return queryWrapper; return queryWrapper;
} }
public <T extends Collection<?>> Wrapper notIn(T collection, Predicate<T> when) { @Override
if (queryWrapper != null) { public Wrapper notIn(Collection<?> value, boolean isEffective) {
queryWrapper.addWhereQueryCondition(queryColumn.notIn(collection, when), connector); addWhereQueryCondition(queryColumn.notIn(value, isEffective));
}
return queryWrapper; return queryWrapper;
} }
/** @Override
* not in child select public Wrapper notIn(Collection<?> value, BooleanSupplier isEffective) {
* addWhereQueryCondition(queryColumn.notIn(value, isEffective));
* @param queryWrapper return queryWrapper;
*/ }
@Override
public <T extends Collection<?>> Wrapper notIn(T value, Predicate<T> isEffective) {
addWhereQueryCondition(queryColumn.notIn(value, isEffective));
return queryWrapper;
}
@Override
public Wrapper notIn(QueryWrapper queryWrapper) { public Wrapper notIn(QueryWrapper queryWrapper) {
if (queryWrapper != null) { addWhereQueryCondition(queryColumn.notIn(queryWrapper));
this.queryWrapper.addWhereQueryCondition(queryColumn.notIn(queryWrapper), connector);
}
return this.queryWrapper; return this.queryWrapper;
} }
/** @Override
* @deprecated 无法推断泛型 public Wrapper notIn(QueryWrapper queryWrapper, boolean isEffective) {
*/ addWhereQueryCondition(queryColumn.notIn(queryWrapper, isEffective));
@Deprecated
public <T> Wrapper notIn(QueryWrapper queryWrapper, Predicate<T> when) {
if (queryWrapper != null) {
this.queryWrapper.addWhereQueryCondition(queryColumn.notIn(queryWrapper, when), connector);
}
return this.queryWrapper; return this.queryWrapper;
} }
@Override
public Wrapper notIn(QueryWrapper queryWrapper, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.notIn(queryWrapper, isEffective));
return this.queryWrapper;
}
/** @Override
* between
*
* @param start
* @param end
*/
public Wrapper between(Object start, Object end) { public Wrapper between(Object start, Object end) {
if (queryWrapper != null) { addWhereQueryCondition(queryColumn.between(start, end));
queryWrapper.addWhereQueryCondition(queryColumn.between(start, end), connector);
}
return queryWrapper; return queryWrapper;
} }
@Override
public <S, E> Wrapper between(S start, E end, BiPredicate<S, E> when) { public Wrapper between(Object start, Object end, boolean isEffective) {
if (queryWrapper != null) { addWhereQueryCondition(queryColumn.between(start, end, isEffective));
queryWrapper.addWhereQueryCondition(queryColumn.between(start, end, when), connector);
}
return queryWrapper; return queryWrapper;
} }
@Override
public Wrapper between(Object start, Object end, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.between(start, end, isEffective));
return queryWrapper;
}
/** @Override
* not between public <S, E> Wrapper between(S start, E end, BiPredicate<S, E> isEffective) {
* addWhereQueryCondition(queryColumn.between(start, end, isEffective));
* @param start return queryWrapper;
* @param end }
*/
@Override
public Wrapper notBetween(Object start, Object end) { public Wrapper notBetween(Object start, Object end) {
if (queryWrapper != null) { addWhereQueryCondition(queryColumn.notBetween(start, end));
queryWrapper.addWhereQueryCondition(queryColumn.notBetween(start, end), connector);
}
return queryWrapper; return queryWrapper;
} }
public <S, E> Wrapper notBetween(S start, E end, BiPredicate<S, E> when) { @Override
if (queryWrapper != null) { public Wrapper notBetween(Object start, Object end, boolean isEffective) {
queryWrapper.addWhereQueryCondition(queryColumn.notBetween(start, end, when), connector); addWhereQueryCondition(queryColumn.notBetween(start, end, isEffective));
}
return queryWrapper; return queryWrapper;
} }
@Override
public Wrapper notBetween(Object start, Object end, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.notBetween(start, end, isEffective));
return queryWrapper;
}
@Override
public <S, E> Wrapper notBetween(S start, E end, BiPredicate<S, E> isEffective) {
addWhereQueryCondition(queryColumn.notBetween(start, end, isEffective));
return queryWrapper;
}
@Override
public Wrapper like(Object value) {
addWhereQueryCondition(queryColumn.like(value));
return queryWrapper;
}
@Override
public Wrapper like(Object value, boolean isEffective) {
addWhereQueryCondition(queryColumn.like(value, isEffective));
return queryWrapper;
}
@Override
public Wrapper like(Object value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.like(value, isEffective));
return queryWrapper;
}
@Override
public <T> Wrapper like(T value, Predicate<T> isEffective) {
addWhereQueryCondition(queryColumn.like(value, isEffective));
return queryWrapper;
}
@Override
public Wrapper likeLeft(Object value) {
addWhereQueryCondition(queryColumn.likeLeft(value));
return queryWrapper;
}
@Override
public Wrapper likeLeft(Object value, boolean isEffective) {
addWhereQueryCondition(queryColumn.likeLeft(value, isEffective));
return queryWrapper;
}
@Override
public Wrapper likeLeft(Object value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.likeLeft(value, isEffective));
return queryWrapper;
}
@Override
public <T> Wrapper likeLeft(T value, Predicate<T> isEffective) {
addWhereQueryCondition(queryColumn.likeLeft(value, isEffective));
return queryWrapper;
}
@Override
public Wrapper likeRight(Object value) {
addWhereQueryCondition(queryColumn.likeRight(value));
return queryWrapper;
}
@Override
public Wrapper likeRight(Object value, boolean isEffective) {
addWhereQueryCondition(queryColumn.likeRight(value, isEffective));
return queryWrapper;
}
@Override
public Wrapper likeRight(Object value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.likeRight(value, isEffective));
return queryWrapper;
}
@Override
public <T> Wrapper likeRight(T value, Predicate<T> isEffective) {
addWhereQueryCondition(queryColumn.likeRight(value, isEffective));
return queryWrapper;
}
@Override
public Wrapper notLike(Object value) {
addWhereQueryCondition(queryColumn.notLike(value));
return queryWrapper;
}
@Override
public Wrapper notLike(Object value, boolean isEffective) {
addWhereQueryCondition(queryColumn.notLike(value, isEffective));
return queryWrapper;
}
@Override
public Wrapper notLike(Object value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.notLike(value, isEffective));
return queryWrapper;
}
@Override
public <T> Wrapper notLike(T value, Predicate<T> isEffective) {
addWhereQueryCondition(queryColumn.notLike(value, isEffective));
return queryWrapper;
}
@Override
public Wrapper notLikeLeft(Object value) {
addWhereQueryCondition(queryColumn.notLikeLeft(value));
return queryWrapper;
}
@Override
public Wrapper notLikeLeft(Object value, boolean isEffective) {
addWhereQueryCondition(queryColumn.notLikeLeft(value, isEffective));
return queryWrapper;
}
@Override
public Wrapper notLikeLeft(Object value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.notLikeLeft(value, isEffective));
return queryWrapper;
}
@Override
public <T> Wrapper notLikeLeft(T value, Predicate<T> isEffective) {
addWhereQueryCondition(queryColumn.notLikeLeft(value, isEffective));
return queryWrapper;
}
@Override
public Wrapper notLikeRight(Object value) {
addWhereQueryCondition(queryColumn.notLikeRight(value));
return queryWrapper;
}
@Override
public Wrapper notLikeRight(Object value, boolean isEffective) {
addWhereQueryCondition(queryColumn.notLikeRight(value, isEffective));
return queryWrapper;
}
@Override
public Wrapper notLikeRight(Object value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.notLikeRight(value, isEffective));
return queryWrapper;
}
@Override
public <T> Wrapper notLikeRight(T value, Predicate<T> isEffective) {
addWhereQueryCondition(queryColumn.notLikeRight(value, isEffective));
return queryWrapper;
}
@Override
public Wrapper isNull(boolean isEffective) {
addWhereQueryCondition(queryColumn.isNull(isEffective));
return queryWrapper;
}
@Override
public Wrapper isNotNull(boolean isEffective) {
addWhereQueryCondition(queryColumn.isNotNull(isEffective));
return queryWrapper;
}
} }

View File

@ -22,6 +22,7 @@ import com.mybatisflex.core.query.QueryColumn;
import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.query.QueryWrapperAdapter; import com.mybatisflex.core.query.QueryWrapperAdapter;
import com.mybatisflex.core.table.*; import com.mybatisflex.core.table.*;
import com.mybatisflex.core.update.PropertySetter;
import com.mybatisflex.core.util.LambdaGetter; import com.mybatisflex.core.util.LambdaGetter;
import com.mybatisflex.core.util.SqlUtil; import com.mybatisflex.core.util.SqlUtil;
@ -37,7 +38,7 @@ import java.util.stream.Collectors;
* @author 王帅 * @author 王帅
* @since 2023-07-22 * @since 2023-07-22
*/ */
public class DbChain extends QueryWrapperAdapter<DbChain> { public class DbChain extends QueryWrapperAdapter<DbChain> implements PropertySetter<DbChain> {
private String schema; private String schema;
private String tableName; private String tableName;
@ -108,18 +109,39 @@ public class DbChain extends QueryWrapperAdapter<DbChain> {
return this; return this;
} }
public DbChain set(String column, Object value) { @Override
getRow().set(column, value); public DbChain set(String property, Object value, boolean isEffective) {
getRow().set(property, value, isEffective);
return this; return this;
} }
public DbChain set(QueryColumn column, Object value) { @Override
getRow().set(column, value); public DbChain set(QueryColumn property, Object value, boolean isEffective) {
getRow().set(property, value, isEffective);
return this; return this;
} }
public <T> DbChain set(LambdaGetter<T> column, Object value) { @Override
getRow().set(column, value); public <T> DbChain set(LambdaGetter<T> property, Object value, boolean isEffective) {
getRow().set(property, value, isEffective);
return this;
}
@Override
public DbChain setRaw(String property, Object value, boolean isEffective) {
getRow().set(property, value, isEffective);
return this;
}
@Override
public DbChain setRaw(QueryColumn property, Object value, boolean isEffective) {
getRow().set(property, value, isEffective);
return this;
}
@Override
public <T> DbChain setRaw(LambdaGetter<T> property, Object value, boolean isEffective) {
getRow().set(property, value, isEffective);
return this; return this;
} }

View File

@ -29,6 +29,8 @@ import java.sql.Time;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
import java.util.function.BooleanSupplier;
import java.util.function.Predicate;
public class Row extends LinkedHashMap<String, Object> implements UpdateWrapper { public class Row extends LinkedHashMap<String, Object> implements UpdateWrapper {
@ -93,8 +95,73 @@ public class Row extends LinkedHashMap<String, Object> implements UpdateWrapper
return row; return row;
} }
@Override
public Row set(String property, Object value, boolean isEffective) {
if (!isEffective) {
return this;
}
if (StringUtil.isBlank(property)) {
throw new IllegalArgumentException("key column not be null or empty.");
}
SqlUtil.keepColumnSafely(property);
if (value instanceof QueryWrapper || value instanceof QueryCondition || value instanceof QueryColumn) {
super.put(property, new RawValue(value));
} else {
super.put(property, value);
}
return this;
}
@Override @Override
public Row set(QueryColumn property, Object value, boolean isEffective) {
if (!isEffective) {
return this;
}
if (value instanceof QueryWrapper || value instanceof QueryCondition || value instanceof QueryColumn) {
super.put(property.getName(), new RawValue(value));
} else {
super.put(property.getName(), value);
}
return this;
}
@Override
public <T> Row set(LambdaGetter<T> property, Object value, boolean isEffective) {
if (!isEffective) {
return this;
}
if (value instanceof QueryWrapper || value instanceof QueryCondition || value instanceof QueryColumn) {
super.put(LambdaUtil.getFieldName(property), new RawValue(value));
} else {
super.put(LambdaUtil.getFieldName(property), value);
}
return this;
}
@Override
public Row setRaw(String property, Object value, boolean isEffective) {
return (Row) UpdateWrapper.super.setRaw(property, value, isEffective);
}
@Override
public Row setRaw(QueryColumn property, Object value, boolean isEffective) {
return (Row) UpdateWrapper.super.setRaw(property, value, isEffective);
}
@Override
public <T> Row setRaw(LambdaGetter<T> property, Object value, boolean isEffective) {
return (Row) UpdateWrapper.super.setRaw(property, value, isEffective);
}
/*@Override
public Row set(String column, Object value) { public Row set(String column, Object value) {
if (StringUtil.isBlank(column)) { if (StringUtil.isBlank(column)) {
throw new IllegalArgumentException("key column not be null or empty."); throw new IllegalArgumentException("key column not be null or empty.");
@ -119,8 +186,97 @@ public class Row extends LinkedHashMap<String, Object> implements UpdateWrapper
super.put(queryColumn.getName(), value); super.put(queryColumn.getName(), value);
} }
return this; return this;
}*/
@Override
public Row set(String property, Object value) {
return set(property, value, true);
} }
@Override
public Row set(String property, Object value, BooleanSupplier isEffective) {
return set(property, value, isEffective.getAsBoolean());
}
@Override
public <V> Row set(String property, V value, Predicate<V> isEffective) {
return set(property, value, isEffective.test(value));
}
@Override
public Row set(QueryColumn property, Object value) {
return set(property, value, true);
}
@Override
public Row set(QueryColumn property, Object value, BooleanSupplier isEffective) {
return set(property, value, isEffective.getAsBoolean());
}
@Override
public <V> Row set(QueryColumn property, V value, Predicate<V> isEffective) {
return set(property, value, isEffective.test(value));
}
@Override
public <T> Row set(LambdaGetter<T> property, Object value) {
return set(property, value, true);
}
@Override
public <T> Row set(LambdaGetter<T> property, Object value, BooleanSupplier isEffective) {
return set(property, value, isEffective.getAsBoolean());
}
@Override
public <T, V> Row set(LambdaGetter<T> property, V value, Predicate<V> isEffective) {
return set(property, value, isEffective.test(value));
}
@Override
public Row setRaw(String property, Object value) {
return setRaw(property, value, true);
}
@Override
public Row setRaw(String property, Object value, BooleanSupplier isEffective) {
return setRaw(property, value, isEffective.getAsBoolean());
}
@Override
public <V> Row setRaw(String property, V value, Predicate<V> isEffective) {
return setRaw(property, value, isEffective.test(value));
}
@Override
public Row setRaw(QueryColumn property, Object value) {
return setRaw(property, value, true);
}
@Override
public Row setRaw(QueryColumn property, Object value, BooleanSupplier isEffective) {
return setRaw(property, value, isEffective.getAsBoolean());
}
@Override
public <V> Row setRaw(QueryColumn property, V value, Predicate<V> isEffective) {
return setRaw(property, value, isEffective.test(value));
}
@Override
public <T> Row setRaw(LambdaGetter<T> property, Object value) {
return setRaw(property, value, true);
}
@Override
public <T> Row setRaw(LambdaGetter<T> property, Object value, BooleanSupplier isEffective) {
return setRaw(property, value, isEffective.getAsBoolean());
}
@Override
public <T, V> Row setRaw(LambdaGetter<T> property, V value, Predicate<V> isEffective) {
return setRaw(property, value, isEffective.test(value));
}
public Object get(String key, Object defaultValue) { public Object get(String key, Object defaultValue) {
Object result = super.get(key); Object result = super.get(key);

View File

@ -0,0 +1,280 @@
/*
* Copyright (c) 2022-2023, Mybatis-Flex (fuhai999@gmail.com).
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.mybatisflex.core.update;
import com.mybatisflex.core.query.QueryColumn;
import com.mybatisflex.core.util.LambdaGetter;
import java.util.function.BooleanSupplier;
import java.util.function.Predicate;
/**
* 属性设置接口
*
* @param <R> 链式调用返回值类型
* @author 王帅
* @since 2023-08-16
*/
public interface PropertySetter<R> {
/**
* 设置字段对应参数值
*
* @param property 字段名
* @param value 参数值
*/
default R set(String property, Object value) {
return set(property, value, true);
}
/**
* 设置字段对应参数值
*
* @param property 字段名
* @param value 参数值
* @param isEffective 是否生效
*/
R set(String property, Object value, boolean isEffective);
/**
* 设置字段对应参数值
*
* @param property 字段名
* @param value 参数值
* @param isEffective 是否生效
*/
default R set(String property, Object value, BooleanSupplier isEffective) {
return set(property, value, isEffective.getAsBoolean());
}
/**
* 设置字段对应参数值
*
* @param property 字段名
* @param value 参数值
* @param isEffective 是否生效
*/
default <V> R set(String property, V value, Predicate<V> isEffective) {
return set(property, value, isEffective.test(value));
}
/**
* 设置字段对应参数值
*
* @param property 字段名
* @param value 参数值
*/
default R set(QueryColumn property, Object value) {
return set(property, value, true);
}
/**
* 设置字段对应参数值
*
* @param property 字段名
* @param value 参数值
* @param isEffective 是否生效
*/
R set(QueryColumn property, Object value, boolean isEffective);
/**
* 设置字段对应参数值
*
* @param property 字段名
* @param value 参数值
* @param isEffective 是否生效
*/
default R set(QueryColumn property, Object value, BooleanSupplier isEffective) {
return set(property, value, isEffective.getAsBoolean());
}
/**
* 设置字段对应参数值
*
* @param property 字段名
* @param value 参数值
* @param isEffective 是否生效
*/
default <V> R set(QueryColumn property, V value, Predicate<V> isEffective) {
return set(property, value, isEffective.test(value));
}
/**
* 设置字段对应参数值
*
* @param property 字段名
* @param value 参数值
*/
default <T> R set(LambdaGetter<T> property, Object value) {
return set(property, value, true);
}
/**
* 设置字段对应参数值
*
* @param property 字段名
* @param value 参数值
* @param isEffective 是否生效
*/
<T> R set(LambdaGetter<T> property, Object value, boolean isEffective);
/**
* 设置字段对应参数值
*
* @param property 字段名
* @param value 参数值
* @param isEffective 是否生效
*/
default <T> R set(LambdaGetter<T> property, Object value, BooleanSupplier isEffective) {
return set(property, value, isEffective.getAsBoolean());
}
/**
* 设置字段对应参数值
*
* @param property 字段名
* @param value 参数值
* @param isEffective 是否生效
*/
default <T, V> R set(LambdaGetter<T> property, V value, Predicate<V> isEffective) {
return set(property, value, isEffective.test(value));
}
/**
* 设置字段对应原生值
*
* @param property 字段名
* @param value 原生值
*/
default R setRaw(String property, Object value) {
return setRaw(property, value, true);
}
/**
* 设置字段对应原生值
*
* @param property 字段名
* @param value 原生值
* @param isEffective 是否生效
*/
R setRaw(String property, Object value, boolean isEffective);
/**
* 设置字段对应原生值
*
* @param property 字段名
* @param value 原生值
* @param isEffective 是否生效
*/
default R setRaw(String property, Object value, BooleanSupplier isEffective) {
return setRaw(property, value, isEffective.getAsBoolean());
}
/**
* 设置字段对应原生值
*
* @param property 字段名
* @param value 原生值
* @param isEffective 是否生效
*/
default <V> R setRaw(String property, V value, Predicate<V> isEffective) {
return setRaw(property, value, isEffective.test(value));
}
/**
* 设置字段对应原生值
*
* @param property 字段名
* @param value 原生值
*/
default R setRaw(QueryColumn property, Object value) {
return setRaw(property, value, true);
}
/**
* 设置字段对应原生值
*
* @param property 字段名
* @param value 原生值
* @param isEffective 是否生效
*/
R setRaw(QueryColumn property, Object value, boolean isEffective);
/**
* 设置字段对应原生值
*
* @param property 字段名
* @param value 原生值
* @param isEffective 是否生效
*/
default R setRaw(QueryColumn property, Object value, BooleanSupplier isEffective) {
return setRaw(property, value, isEffective.getAsBoolean());
}
/**
* 设置字段对应原生值
*
* @param property 字段名
* @param value 原生值
* @param isEffective 是否生效
*/
default <V> R setRaw(QueryColumn property, V value, Predicate<V> isEffective) {
return setRaw(property, value, isEffective.test(value));
}
/**
* 设置字段对应原生值
*
* @param property 字段名
* @param value 原生值
*/
default <T> R setRaw(LambdaGetter<T> property, Object value) {
return setRaw(property, value, true);
}
/**
* 设置字段对应原生值
*
* @param property 字段名
* @param value 原生值
* @param isEffective 是否生效
*/
<T> R setRaw(LambdaGetter<T> property, Object value, boolean isEffective);
/**
* 设置字段对应原生值
*
* @param property 字段名
* @param value 原生值
* @param isEffective 是否生效
*/
default <T> R setRaw(LambdaGetter<T> property, Object value, BooleanSupplier isEffective) {
return setRaw(property, value, isEffective.getAsBoolean());
}
/**
* 设置字段对应原生值
*
* @param property 字段名
* @param value 原生值
* @param isEffective 是否生效
*/
default <T, V> R setRaw(LambdaGetter<T> property, V value, Predicate<V> isEffective) {
return setRaw(property, value, isEffective.test(value));
}
}

View File

@ -37,7 +37,7 @@ import java.lang.reflect.Type;
* @since 2023-07-25 * @since 2023-07-25
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public class UpdateChain<T> extends QueryWrapperAdapter<UpdateChain<T>> { public class UpdateChain<T> extends QueryWrapperAdapter<UpdateChain<T>> implements PropertySetter<UpdateChain<T>> {
private final BaseMapper<T> baseMapper; private final BaseMapper<T> baseMapper;
private final T entity; private final T entity;
@ -82,64 +82,40 @@ public class UpdateChain<T> extends QueryWrapperAdapter<UpdateChain<T>> {
return new UpdateChain<>(baseMapper); return new UpdateChain<>(baseMapper);
} }
public UpdateChain<T> set(String property, Object value, boolean condition) { @Override
entityWrapper.set(property, value, condition); public UpdateChain<T> set(String property, Object value, boolean isEffective) {
entityWrapper.set(property, value, isEffective);
return this; return this;
} }
public UpdateChain<T> set(String property, Object value) { @Override
entityWrapper.set(property, value); public UpdateChain<T> set(QueryColumn queryColumn, Object value, boolean isEffective) {
entityWrapper.set(queryColumn, value, isEffective);
return this; return this;
} }
public <L> UpdateChain<T> set(LambdaGetter<L> getter, Object value, boolean condition) { @Override
entityWrapper.set(getter, value, condition); public <L> UpdateChain<T> set(LambdaGetter<L> getter, Object value, boolean isEffective) {
return this; entityWrapper.set(getter, value, isEffective);
}
public <L> UpdateChain<T> set(LambdaGetter<L> getter, Object value) {
entityWrapper.set(getter, value);
return this;
}
public UpdateChain<T> set(QueryColumn queryColumn, Object value, boolean condition) {
entityWrapper.set(queryColumn, value, condition);
return this; return this;
} }
public UpdateChain<T> set(QueryColumn queryColumn, Object value) { @Override
entityWrapper.set(queryColumn, value); public UpdateChain<T> setRaw(String property, Object value, boolean isEffective) {
entityWrapper.setRaw(property, value, isEffective);
return this; return this;
} }
public UpdateChain<T> setRaw(String property, Object value, boolean condition) { @Override
entityWrapper.setRaw(property, value, condition); public UpdateChain<T> setRaw(QueryColumn queryColumn, Object value, boolean isEffective) {
entityWrapper.setRaw(queryColumn, value, isEffective);
return this; return this;
} }
public UpdateChain<T> setRaw(String property, Object value) { @Override
entityWrapper.setRaw(property, value); public <L> UpdateChain<T> setRaw(LambdaGetter<L> getter, Object value, boolean isEffective) {
return this; entityWrapper.setRaw(getter, value, isEffective);
}
public <L> UpdateChain<T> setRaw(LambdaGetter<L> getter, Object value, boolean condition) {
entityWrapper.setRaw(getter, value, condition);
return this;
}
public <L> UpdateChain<T> setRaw(LambdaGetter<L> getter, Object value) {
entityWrapper.setRaw(getter, value);
return this;
}
public UpdateChain<T> setRaw(QueryColumn queryColumn, Object value, boolean condition) {
entityWrapper.setRaw(queryColumn, value, condition);
return this;
}
public UpdateChain<T> setRaw(QueryColumn queryColumn, Object value) {
entityWrapper.set(queryColumn, value);
return this; return this;
} }

View File

@ -29,103 +29,79 @@ import java.util.Map;
/** /**
* @author michael * @author michael
*/ */
public interface UpdateWrapper extends Serializable { public interface UpdateWrapper extends PropertySetter<UpdateWrapper>, Serializable {
default Map<String, Object> getUpdates() { default Map<String, Object> getUpdates() {
ModifyAttrsRecordHandler handler = (ModifyAttrsRecordHandler) ((ProxyObject) this).getHandler(); ModifyAttrsRecordHandler handler = (ModifyAttrsRecordHandler) ((ProxyObject) this).getHandler();
return handler.getUpdates(); return handler.getUpdates();
} }
default UpdateWrapper set(String property, Object value, boolean condition) { @Override
if (condition) { default UpdateWrapper set(String property, Object value, boolean isEffective) {
return set(property, value); if (isEffective) {
} if (value instanceof QueryWrapper
return this; || value instanceof QueryColumn
} || value instanceof QueryCondition) {
getUpdates().put(property, new RawValue(value));
default UpdateWrapper set(String property, Object value) {
if (value instanceof QueryWrapper || value instanceof QueryCondition || value instanceof QueryColumn) {
setRaw(property, value);
} else { } else {
getUpdates().put(property, value); getUpdates().put(property, value);
} }
return this;
}
default <T> UpdateWrapper set(LambdaGetter<T> getter, Object value, boolean condition) {
if (condition) {
return set(getter, value);
} }
return this; return this;
} }
default <T> UpdateWrapper set(LambdaGetter<T> getter, Object value) { @Override
if (value instanceof QueryWrapper || value instanceof QueryCondition || value instanceof QueryColumn) { default UpdateWrapper set(QueryColumn property, Object value, boolean isEffective) {
setRaw(getter, value); if (isEffective) {
if (value instanceof QueryWrapper
|| value instanceof QueryColumn
|| value instanceof QueryCondition) {
getUpdates().put(property.getName(), new RawValue(value));
} else { } else {
getUpdates().put(LambdaUtil.getFieldName(getter), value); getUpdates().put(property.getName(), value);
} }
return this;
}
default <T> UpdateWrapper set(QueryColumn queryColumn, Object value, boolean condition) {
if (condition) {
return set(queryColumn, value);
} }
return this; return this;
} }
default <T> UpdateWrapper set(QueryColumn queryColumn, Object value) { @Override
if (value instanceof QueryWrapper || value instanceof QueryCondition || value instanceof QueryColumn) { default <T> UpdateWrapper set(LambdaGetter<T> property, Object value, boolean isEffective) {
setRaw(queryColumn, value); if (isEffective) {
if (value instanceof QueryWrapper
|| value instanceof QueryColumn
|| value instanceof QueryCondition) {
getUpdates().put(LambdaUtil.getFieldName(property), new RawValue(value));
} else { } else {
getUpdates().put(queryColumn.getName(), value); getUpdates().put(LambdaUtil.getFieldName(property), value);
}
} }
return this; return this;
} }
@Override
default UpdateWrapper setRaw(String property, Object value, boolean condition) { default UpdateWrapper setRaw(String property, Object value, boolean isEffective) {
if (condition) { if (isEffective) {
return setRaw(property, value);
}
return this;
}
default UpdateWrapper setRaw(String property, Object value) {
getUpdates().put(property, new RawValue(value)); getUpdates().put(property, new RawValue(value));
return this;
}
default <T> UpdateWrapper setRaw(LambdaGetter<T> getter, Object value, boolean condition) {
if (condition) {
return setRaw(getter, value);
} }
return this; return this;
} }
@Override
default <T> UpdateWrapper setRaw(LambdaGetter<T> getter, Object value) { default UpdateWrapper setRaw(QueryColumn property, Object value, boolean isEffective) {
getUpdates().put(LambdaUtil.getFieldName(getter), new RawValue(value)); if (isEffective) {
return this; getUpdates().put(property.getName(), new RawValue(value));
}
default <T> UpdateWrapper setRaw(QueryColumn queryColumn, Object value, boolean condition) {
if (condition) {
return setRaw(queryColumn, value);
} }
return this; return this;
} }
default <T> UpdateWrapper setRaw(QueryColumn queryColumn, Object value) { @Override
getUpdates().put(queryColumn.getName(), new RawValue(value)); default <T> UpdateWrapper setRaw(LambdaGetter<T> property, Object value, boolean isEffective) {
if (isEffective) {
getUpdates().put(LambdaUtil.getFieldName(property), new RawValue(value));
}
return this; return this;
} }
static UpdateWrapper of(Object entity) { static UpdateWrapper of(Object entity) {
if (entity instanceof UpdateWrapper) { if (entity instanceof UpdateWrapper) {
return (UpdateWrapper) entity; return (UpdateWrapper) entity;