!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;
import com.mybatisflex.core.query.CPI;
import com.mybatisflex.core.query.QueryColumn;
import com.mybatisflex.core.query.SqlConnector;
import com.mybatisflex.core.query.*;
import com.mybatisflex.core.util.LambdaGetter;
import com.mybatisflex.core.util.LambdaUtil;
import java.util.Collection;
import java.util.function.BiPredicate;
import java.util.function.BooleanSupplier;
import java.util.function.Predicate;
/**
@ -31,7 +30,7 @@ import java.util.function.Predicate;
* @author 王帅
* @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 QueryColumn queryColumn;
@ -43,368 +42,661 @@ public class WhereBuilder<R extends QueryModel<R>> {
this.connector = connector;
}
private void addWhereQueryCondition(QueryCondition queryCondition) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryCondition, connector);
}
@Override
public R eq(Object value) {
if (value != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.eq(value), connector);
}
addWhereQueryCondition(queryColumn.eq(value));
return queryModel;
}
public <T> R eq(T value, Predicate<T> when) {
if (value != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.eq(value, when), connector);
}
@Override
public R eq(Object value, boolean isEffective) {
addWhereQueryCondition(queryColumn.eq(value, isEffective));
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) {
return eq(LambdaUtil.getQueryColumn(value));
return eq(LambdaUtil.getQueryColumn(value), true);
}
/**
* @deprecated {@link Predicate} 泛型参数无效
* 等于 {@code =}
*/
@Deprecated
public <T> R eq(LambdaGetter<T> value, Predicate<T> when) {
if (value != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.eq(LambdaUtil.getQueryColumn(value)).when(when), connector);
}
return queryModel;
public <T> R eq(LambdaGetter<T> value, boolean isEffective) {
return eq(LambdaUtil.getQueryColumn(value), isEffective);
}
/**
* 等于 {@code =}
*/
public <T> R eq(LambdaGetter<T> value, BooleanSupplier isEffective) {
return eq(LambdaUtil.getQueryColumn(value), isEffective.getAsBoolean());
}
@Override
public R ne(Object value) {
if (value != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.ne(value), connector);
}
addWhereQueryCondition(queryColumn.ne(value));
return queryModel;
}
public <T> R ne(T value, Predicate<T> when) {
if (value != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.ne(value, when), connector);
}
@Override
public R ne(Object value, boolean isEffective) {
addWhereQueryCondition(queryColumn.ne(value, isEffective));
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) {
return ne(LambdaUtil.getQueryColumn(value));
return ne(LambdaUtil.getQueryColumn(value), true);
}
/**
* @deprecated {@link Predicate} 泛型参数无效
* 不等于 {@code !=}
*/
@Deprecated
public <T> R ne(LambdaGetter<T> value, Predicate<T> when) {
if (value != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.ne(LambdaUtil.getQueryColumn(value)).when(when), connector);
}
return queryModel;
public <T> R ne(LambdaGetter<T> value, boolean isEffective) {
return ne(LambdaUtil.getQueryColumn(value), isEffective);
}
public R like(Object value) {
if (value != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.like(value), connector);
}
return queryModel;
}
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;
/**
* 不等于 {@code !=}
*/
public <T> R ne(LambdaGetter<T> value, BooleanSupplier isEffective) {
return ne(LambdaUtil.getQueryColumn(value), isEffective.getAsBoolean());
}
@Override
public R gt(Object value) {
if (value != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.gt(value), connector);
}
addWhereQueryCondition(queryColumn.gt(value));
return queryModel;
}
public <T> R gt(T value, Predicate<T> when) {
if (value != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.gt(value, when), connector);
}
@Override
public R gt(Object value, boolean isEffective) {
addWhereQueryCondition(queryColumn.gt(value, isEffective));
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) {
return gt(LambdaUtil.getQueryColumn(value));
return gt(LambdaUtil.getQueryColumn(value), true);
}
/**
* @deprecated {@link Predicate} 泛型参数无效
* 大于 {@code >}
*/
@Deprecated
public <T> R gt(LambdaGetter<T> value, Predicate<T> when) {
if (value != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.gt(LambdaUtil.getQueryColumn(value)).when(when), connector);
}
return queryModel;
public <T> R gt(LambdaGetter<T> value, boolean isEffective) {
return gt(LambdaUtil.getQueryColumn(value), isEffective);
}
/**
* 大于 {@code >}
*/
public <T> R gt(LambdaGetter<T> value, BooleanSupplier isEffective) {
return gt(LambdaUtil.getQueryColumn(value), isEffective.getAsBoolean());
}
@Override
public R ge(Object value) {
if (value != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.ge(value), connector);
}
addWhereQueryCondition(queryColumn.ge(value));
return queryModel;
}
public <T> R ge(T value, Predicate<T> when) {
if (value != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.ge(value, when), connector);
}
@Override
public R ge(Object value, boolean isEffective) {
addWhereQueryCondition(queryColumn.ge(value, isEffective));
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) {
return ge(LambdaUtil.getQueryColumn(value));
return eq(LambdaUtil.getQueryColumn(value), true);
}
/**
* @deprecated {@link Predicate} 泛型参数无效
* 大于等于 {@code >=}
*/
@Deprecated
public <T> R ge(LambdaGetter<T> value, Predicate<T> when) {
if (value != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.ge(LambdaUtil.getQueryColumn(value)).when(when), connector);
}
return queryModel;
public <T> R ge(LambdaGetter<T> value, boolean isEffective) {
return eq(LambdaUtil.getQueryColumn(value), isEffective);
}
/**
* 大于等于 {@code >=}
*/
public <T> R ge(LambdaGetter<T> value, BooleanSupplier isEffective) {
return ge(LambdaUtil.getQueryColumn(value), isEffective.getAsBoolean());
}
@Override
public R lt(Object value) {
if (value != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.lt(value), connector);
}
addWhereQueryCondition(queryColumn.lt(value));
return queryModel;
}
public <T> R lt(T value, Predicate<T> when) {
if (value != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.lt(value, when), connector);
}
@Override
public R lt(Object value, boolean isEffective) {
addWhereQueryCondition(queryColumn.lt(value, isEffective));
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) {
return lt(LambdaUtil.getQueryColumn(value));
return lt(LambdaUtil.getQueryColumn(value), true);
}
/**
* @deprecated {@link Predicate} 泛型参数无效
* 小于 {@code <}
*/
@Deprecated
public <T> R lt(LambdaGetter<T> value, Predicate<T> when) {
if (value != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.lt(LambdaUtil.getQueryColumn(value)).when(when), connector);
}
return queryModel;
public <T> R lt(LambdaGetter<T> value, boolean isEffective) {
return lt(LambdaUtil.getQueryColumn(value), isEffective);
}
/**
* 小于 {@code <}
*/
public <T> R lt(LambdaGetter<T> value, BooleanSupplier isEffective) {
return lt(LambdaUtil.getQueryColumn(value), isEffective.getAsBoolean());
}
@Override
public R le(Object value) {
if (value != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.le(value), connector);
}
addWhereQueryCondition(queryColumn.le(value));
return queryModel;
}
public <T> R le(T value, Predicate<T> when) {
if (value != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.le(value, when), connector);
}
@Override
public R le(Object value, boolean isEffective) {
addWhereQueryCondition(queryColumn.le(value, isEffective));
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) {
return le(LambdaUtil.getQueryColumn(value));
return le(LambdaUtil.getQueryColumn(value), true);
}
/**
* @deprecated {@link Predicate} 泛型参数无效
* 小于等于 {@code <=}
*/
@Deprecated
public <T> R le(LambdaGetter<T> value, Predicate<T> when) {
if (value != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.le(LambdaUtil.getQueryColumn(value)).when(when), connector);
}
public <T> R le(LambdaGetter<T> value, boolean isEffective) {
return le(LambdaUtil.getQueryColumn(value), isEffective);
}
/**
* 小于等于 {@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;
}
public R isNull() {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.isNull(), connector);
@Override
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;
}
/**
* @deprecated 无法推断泛型
* {@code IN(value)}
*/
@Deprecated
public <T> R isNull(Predicate<T> when) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.isNull(when), connector);
return queryModel;
}
public R isNotNull() {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.isNotNull(), connector);
return queryModel;
public R in(QueryModel<R> queryModel) {
return in(queryModel, true);
}
/**
* @deprecated 无法推断泛型
* {@code IN(value)}
*/
@Deprecated
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) {
public R in(QueryModel<R> queryModel, boolean isEffective) {
if (queryModel != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.in(queryModel), connector);
addWhereQueryCondition(queryColumn.in(queryModel.queryWrapper(), isEffective));
}
return this.queryModel;
}
/**
* @deprecated 无法推断泛型
* {@code IN(value)}
*/
@Deprecated
public <T> R in(R queryModel, Predicate<T> when) {
if (queryModel != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.in(queryModel, when), connector);
}
return this.queryModel;
public R in(QueryModel<R> queryModel, BooleanSupplier isEffective) {
return in(queryModel, isEffective.getAsBoolean());
}
public R in(Collection<?> collection) {
if (queryModel != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.in(collection), connector);
}
@Override
public R notIn(Object... value) {
addWhereQueryCondition(queryColumn.notIn(value));
return queryModel;
}
public <T extends Collection<?>> R in(T collection, Predicate<T> when) {
if (queryModel != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.in(collection, when), connector);
}
@Override
public R notIn(Object[] value, boolean isEffective) {
addWhereQueryCondition(queryColumn.notIn(value, isEffective));
return queryModel;
}
public R notIn(Object... arrays) {
if (queryModel != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.notIn(arrays), connector);
}
@Override
public R notIn(Object[] value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.notIn(value, isEffective));
return queryModel;
}
public <T> R notIn(T[] arrays, Predicate<T[]> when) {
if (queryModel != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.notIn(arrays, when), connector);
}
@Override
public <T> R notIn(T[] value, Predicate<T[]> isEffective) {
addWhereQueryCondition(queryColumn.notIn(value, isEffective));
return queryModel;
}
public R notIn(Collection<?> collection) {
if (queryModel != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.notIn(collection), connector);
}
@Override
public R notIn(Collection<?> value) {
addWhereQueryCondition(queryColumn.notIn(value));
return queryModel;
}
public <T extends Collection<?>> R notIn(T collection, Predicate<T> when) {
if (queryModel != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.notIn(collection, when), connector);
}
@Override
public R notIn(Collection<?> value, boolean isEffective) {
addWhereQueryCondition(queryColumn.notIn(value, isEffective));
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) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.notIn(queryModel), connector);
addWhereQueryCondition(queryColumn.notIn(queryModel.queryWrapper(), isEffective));
}
return this.queryModel;
}
/**
* @deprecated 无法推断泛型
* {@code NOT IN(value)}
*/
@Deprecated
public <T> R notIn(R queryModel, Predicate<T> when) {
if (queryModel != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.notIn(queryModel, when), connector);
}
return this.queryModel;
public R notIn(QueryModel<R> queryModel, BooleanSupplier isEffective) {
return notIn(queryModel, isEffective.getAsBoolean());
}
@Override
public R between(Object start, Object end) {
if (queryModel != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.between(start, end), connector);
}
addWhereQueryCondition(queryColumn.between(start, end));
return queryModel;
}
public <S, E> R between(S start, E end, BiPredicate<S, E> when) {
if (queryModel != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.between(start, end, when), connector);
}
@Override
public R between(Object start, Object end, boolean isEffective) {
addWhereQueryCondition(queryColumn.between(start, end, isEffective));
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) {
if (queryModel != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.notBetween(start, end), connector);
}
addWhereQueryCondition(queryColumn.notBetween(start, end));
return queryModel;
}
public <S, E> R notBetween(S start, E end, BiPredicate<S, E> when) {
if (queryModel != null) {
CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.notBetween(start, end, when), connector);
}
@Override
public R notBetween(Object start, Object end, boolean isEffective) {
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;
}

View File

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

View File

@ -20,8 +20,6 @@ import com.mybatisflex.core.util.ObjectUtil;
import com.mybatisflex.core.util.StringUtil;
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);
}
@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
protected QueryCondition 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.SqlOperator;
import com.mybatisflex.core.dialect.IDialect;
import com.mybatisflex.core.exception.FlexExceptions;
import com.mybatisflex.core.util.ClassUtil;
@ -70,7 +71,12 @@ public class QueryCondition implements CloneSupport<QueryCondition> {
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() {

View File

@ -20,9 +20,10 @@ import com.mybatisflex.core.util.LambdaUtil;
import java.util.Collection;
import java.util.function.BiPredicate;
import java.util.function.BooleanSupplier;
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 QueryColumn queryColumn;
@ -35,479 +36,614 @@ public class QueryConditionBuilder<Wrapper extends QueryWrapper> {
this.connector = connector;
}
/**
* equals
*
* @param value
*/
private void addWhereQueryCondition(QueryCondition queryCondition) {
queryWrapper.addWhereQueryCondition(queryCondition, connector);
}
@Override
public Wrapper eq(Object value) {
if (value != null) {
queryWrapper.addWhereQueryCondition(queryColumn.eq(value), connector);
}
addWhereQueryCondition(queryColumn.eq(value));
return queryWrapper;
}
public <T> Wrapper eq(T value, Predicate<T> when) {
if (value != null) {
queryWrapper.addWhereQueryCondition(queryColumn.eq(value, when), connector);
}
@Override
public Wrapper eq(Object value, boolean isEffective) {
addWhereQueryCondition(queryColumn.eq(value, isEffective));
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) {
return eq(LambdaUtil.getQueryColumn(value));
return eq(LambdaUtil.getQueryColumn(value), true);
}
/**
* @deprecated {@link Predicate} 泛型参数无效
* 等于 {@code =}
*/
@Deprecated
public <T> Wrapper eq(LambdaGetter<T> value, Predicate<T> when) {
if (value != null) {
queryWrapper.addWhereQueryCondition(queryColumn.eq(value).when(when), connector);
}
return queryWrapper;
public <T> Wrapper eq(LambdaGetter<T> value, boolean isEffective) {
return eq(LambdaUtil.getQueryColumn(value), isEffective);
}
/**
* not equals !=
*
* @param value
* 等于 {@code =}
*/
public <T> Wrapper eq(LambdaGetter<T> value, BooleanSupplier isEffective) {
return eq(LambdaUtil.getQueryColumn(value), isEffective.getAsBoolean());
}
@Override
public Wrapper ne(Object value) {
if (value != null) {
queryWrapper.addWhereQueryCondition(queryColumn.ne(value), connector);
}
addWhereQueryCondition(queryColumn.ne(value));
return queryWrapper;
}
public <T> Wrapper ne(T value, Predicate<T> when) {
if (value != null) {
queryWrapper.addWhereQueryCondition(queryColumn.ne(value, when), connector);
}
@Override
public Wrapper ne(Object value, boolean isEffective) {
addWhereQueryCondition(queryColumn.ne(value, isEffective));
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) {
return ne(LambdaUtil.getQueryColumn(value));
}
/**
* @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;
return ne(LambdaUtil.getQueryColumn(value), true);
}
/**
* 大于 greater than
*
* @param value
* 不等于 {@code !=}
*/
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) {
if (value != null) {
queryWrapper.addWhereQueryCondition(queryColumn.gt(value), connector);
}
addWhereQueryCondition(queryColumn.gt(value));
return queryWrapper;
}
public <T> Wrapper gt(T value, Predicate<T> when) {
if (value != null) {
queryWrapper.addWhereQueryCondition(queryColumn.gt(value, when), connector);
}
@Override
public Wrapper gt(Object value, boolean isEffective) {
addWhereQueryCondition(queryColumn.gt(value, isEffective));
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) {
return gt(LambdaUtil.getQueryColumn(value));
return gt(LambdaUtil.getQueryColumn(value), true);
}
/**
* @deprecated {@link Predicate} 泛型参数无效
* 大于 {@code >}
*/
@Deprecated
public <T> Wrapper gt(LambdaGetter<T> value, Predicate<T> when) {
if (value != null) {
queryWrapper.addWhereQueryCondition(queryColumn.gt(value).when(when), connector);
}
return queryWrapper;
public <T> Wrapper gt(LambdaGetter<T> value, boolean isEffective) {
return gt(LambdaUtil.getQueryColumn(value), isEffective);
}
/**
* 大于等于 greater or equal
*
* @param value
* 大于 {@code >}
*/
public <T> Wrapper gt(LambdaGetter<T> value, BooleanSupplier isEffective) {
return gt(LambdaUtil.getQueryColumn(value), isEffective.getAsBoolean());
}
@Override
public Wrapper ge(Object value) {
if (value != null) {
queryWrapper.addWhereQueryCondition(queryColumn.ge(value), connector);
}
addWhereQueryCondition(queryColumn.ge(value));
return queryWrapper;
}
public <T> Wrapper ge(T value, Predicate<T> when) {
if (value != null) {
queryWrapper.addWhereQueryCondition(queryColumn.ge(value, when), connector);
}
@Override
public Wrapper ge(Object value, boolean isEffective) {
addWhereQueryCondition(queryColumn.ge(value, isEffective));
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) {
return ge(LambdaUtil.getQueryColumn(value));
return eq(LambdaUtil.getQueryColumn(value), true);
}
/**
* @deprecated {@link Predicate} 泛型参数无效
* 大于等于 {@code >=}
*/
@Deprecated
public <T> Wrapper ge(LambdaGetter<T> value, Predicate<T> when) {
if (value != null) {
queryWrapper.addWhereQueryCondition(queryColumn.ge(value).when(when), connector);
}
return queryWrapper;
public <T> Wrapper ge(LambdaGetter<T> value, boolean isEffective) {
return eq(LambdaUtil.getQueryColumn(value), isEffective);
}
/**
* 小于 less than
*
* @param value
* 大于等于 {@code >=}
*/
public <T> Wrapper ge(LambdaGetter<T> value, BooleanSupplier isEffective) {
return ge(LambdaUtil.getQueryColumn(value), isEffective.getAsBoolean());
}
@Override
public Wrapper lt(Object value) {
if (value != null) {
queryWrapper.addWhereQueryCondition(queryColumn.lt(value), connector);
}
addWhereQueryCondition(queryColumn.lt(value));
return queryWrapper;
}
public <T> Wrapper lt(T value, Predicate<T> when) {
if (value != null) {
queryWrapper.addWhereQueryCondition(queryColumn.lt(value, when), connector);
}
@Override
public Wrapper lt(Object value, boolean isEffective) {
addWhereQueryCondition(queryColumn.lt(value, isEffective));
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) {
return lt(LambdaUtil.getQueryColumn(value));
return lt(LambdaUtil.getQueryColumn(value), true);
}
/**
* @deprecated {@link Predicate} 泛型参数无效
* 小于 {@code <}
*/
@Deprecated
public <T> Wrapper lt(LambdaGetter<T> value, Predicate<T> when) {
if (value != null) {
queryWrapper.addWhereQueryCondition(queryColumn.lt(value).when(when), connector);
}
return queryWrapper;
public <T> Wrapper lt(LambdaGetter<T> value, boolean isEffective) {
return lt(LambdaUtil.getQueryColumn(value), isEffective);
}
/**
* 小于等于 less or equal
*
* @param value
* 小于 {@code <}
*/
public <T> Wrapper lt(LambdaGetter<T> value, BooleanSupplier isEffective) {
return lt(LambdaUtil.getQueryColumn(value), isEffective.getAsBoolean());
}
@Override
public Wrapper le(Object value) {
if (value != null) {
queryWrapper.addWhereQueryCondition(queryColumn.le(value), connector);
}
addWhereQueryCondition(queryColumn.le(value));
return queryWrapper;
}
public <T> Wrapper le(T value, Predicate<T> when) {
if (value != null) {
queryWrapper.addWhereQueryCondition(queryColumn.le(value, when), connector);
}
@Override
public Wrapper le(Object value, boolean isEffective) {
addWhereQueryCondition(queryColumn.le(value, isEffective));
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) {
return le(LambdaUtil.getQueryColumn(value));
return le(LambdaUtil.getQueryColumn(value), true);
}
/**
* @deprecated {@link Predicate} 泛型参数无效
* 小于等于 {@code <=}
*/
@Deprecated
public <T> Wrapper le(LambdaGetter<T> value, Predicate<T> when) {
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;
public <T> Wrapper le(LambdaGetter<T> value, boolean isEffective) {
return le(LambdaUtil.getQueryColumn(value), isEffective);
}
/**
* @deprecated 无法推断泛型
* 小于等于 {@code <=}
*/
@Deprecated
public <T> Wrapper isNull(Predicate<T> when) {
queryWrapper.addWhereQueryCondition(queryColumn.isNull(when), connector);
public <T> Wrapper le(LambdaGetter<T> value, BooleanSupplier isEffective) {
return le(LambdaUtil.getQueryColumn(value), isEffective.getAsBoolean());
}
@Override
public Wrapper in(Object... value) {
addWhereQueryCondition(queryColumn.in(value));
return queryWrapper;
}
/**
* IS NOT NULL
*
* @return
*/
public Wrapper isNotNull() {
queryWrapper.addWhereQueryCondition(queryColumn.isNotNull(), connector);
@Override
public Wrapper in(Object[] value, boolean isEffective) {
addWhereQueryCondition(queryColumn.in(value, isEffective));
return queryWrapper;
}
/**
* @deprecated 无法推断泛型
*/
@Deprecated
public <T> Wrapper isNotNull(Predicate<T> when) {
queryWrapper.addWhereQueryCondition(queryColumn.isNotNull(when), connector);
@Override
public Wrapper in(Object[] value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.in(value, isEffective));
return queryWrapper;
}
/**
* in arrays
*
* @param arrays
* @return
*/
public Wrapper in(Object... arrays) {
if (arrays != null) {
queryWrapper.addWhereQueryCondition(queryColumn.in(arrays), connector);
}
@Override
public <T> Wrapper in(T[] value, Predicate<T[]> isEffective) {
addWhereQueryCondition(queryColumn.in(value, isEffective));
return queryWrapper;
}
public <T> Wrapper in(T[] arrays, Predicate<T[]> when) {
//忽略 QueryWrapper.in("name", null) 的情况
if (arrays != null) {
queryWrapper.addWhereQueryCondition(queryColumn.in(arrays, when), connector);
}
@Override
public Wrapper in(Collection<?> value) {
addWhereQueryCondition(queryColumn.in(value));
return queryWrapper;
}
/**
* in child select
*
* @param queryWrapper
* @return
*/
@Override
public Wrapper in(Collection<?> value, boolean isEffective) {
addWhereQueryCondition(queryColumn.in(value, isEffective));
return queryWrapper;
}
@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) {
if (queryWrapper != null) {
this.queryWrapper.addWhereQueryCondition(queryColumn.in(queryWrapper), connector);
}
addWhereQueryCondition(queryColumn.in(queryWrapper));
return this.queryWrapper;
}
/**
* @deprecated 无法推断泛型
*/
@Deprecated
public <T> Wrapper in(QueryWrapper queryWrapper, Predicate<T> when) {
if (queryWrapper != null) {
this.queryWrapper.addWhereQueryCondition(queryColumn.in(queryWrapper, when), connector);
}
@Override
public Wrapper in(QueryWrapper queryWrapper, boolean isEffective) {
addWhereQueryCondition(queryColumn.in(queryWrapper, isEffective));
return this.queryWrapper;
}
@Override
public Wrapper in(QueryWrapper queryWrapper, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.in(queryWrapper, isEffective));
return this.queryWrapper;
}
/**
* in Collection
*
* @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;
}
public <T extends Collection<?>> Wrapper in(T collection, Predicate<T> when) {
if (queryWrapper != null) {
queryWrapper.addWhereQueryCondition(queryColumn.in(collection, when), connector);
}
@Override
public Wrapper notIn(Object[] value, boolean isEffective) {
addWhereQueryCondition(queryColumn.notIn(value, isEffective));
return queryWrapper;
}
/**
* not int arrays
*
* @param arrays
* @return
*/
public Wrapper notIn(Object... arrays) {
if (queryWrapper != null) {
queryWrapper.addWhereQueryCondition(queryColumn.notIn(arrays), connector);
}
@Override
public Wrapper notIn(Object[] value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.notIn(value, isEffective));
return queryWrapper;
}
public <T> Wrapper notIn(T[] arrays, Predicate<T[]> when) {
if (queryWrapper != null) {
queryWrapper.addWhereQueryCondition(queryColumn.notIn(arrays, when), connector);
}
@Override
public <T> Wrapper notIn(T[] value, Predicate<T[]> isEffective) {
addWhereQueryCondition(queryColumn.notIn(value, isEffective));
return queryWrapper;
}
/**
* not in Collection
*
* @param collection
* @return
*/
public Wrapper notIn(Collection<?> collection) {
if (queryWrapper != null) {
queryWrapper.addWhereQueryCondition(queryColumn.notIn(collection), connector);
}
@Override
public Wrapper notIn(Collection<?> value) {
addWhereQueryCondition(queryColumn.notIn(value));
return queryWrapper;
}
public <T extends Collection<?>> Wrapper notIn(T collection, Predicate<T> when) {
if (queryWrapper != null) {
queryWrapper.addWhereQueryCondition(queryColumn.notIn(collection, when), connector);
}
@Override
public Wrapper notIn(Collection<?> value, boolean isEffective) {
addWhereQueryCondition(queryColumn.notIn(value, isEffective));
return queryWrapper;
}
/**
* not in child select
*
* @param queryWrapper
*/
@Override
public Wrapper notIn(Collection<?> value, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.notIn(value, isEffective));
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) {
if (queryWrapper != null) {
this.queryWrapper.addWhereQueryCondition(queryColumn.notIn(queryWrapper), connector);
}
addWhereQueryCondition(queryColumn.notIn(queryWrapper));
return this.queryWrapper;
}
/**
* @deprecated 无法推断泛型
*/
@Deprecated
public <T> Wrapper notIn(QueryWrapper queryWrapper, Predicate<T> when) {
if (queryWrapper != null) {
this.queryWrapper.addWhereQueryCondition(queryColumn.notIn(queryWrapper, when), connector);
}
@Override
public Wrapper notIn(QueryWrapper queryWrapper, boolean isEffective) {
addWhereQueryCondition(queryColumn.notIn(queryWrapper, isEffective));
return this.queryWrapper;
}
@Override
public Wrapper notIn(QueryWrapper queryWrapper, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.notIn(queryWrapper, isEffective));
return this.queryWrapper;
}
/**
* between
*
* @param start
* @param end
*/
@Override
public Wrapper between(Object start, Object end) {
if (queryWrapper != null) {
queryWrapper.addWhereQueryCondition(queryColumn.between(start, end), connector);
}
addWhereQueryCondition(queryColumn.between(start, end));
return queryWrapper;
}
public <S, E> Wrapper between(S start, E end, BiPredicate<S, E> when) {
if (queryWrapper != null) {
queryWrapper.addWhereQueryCondition(queryColumn.between(start, end, when), connector);
}
@Override
public Wrapper between(Object start, Object end, boolean isEffective) {
addWhereQueryCondition(queryColumn.between(start, end, isEffective));
return queryWrapper;
}
@Override
public Wrapper between(Object start, Object end, BooleanSupplier isEffective) {
addWhereQueryCondition(queryColumn.between(start, end, isEffective));
return queryWrapper;
}
/**
* not between
*
* @param start
* @param end
*/
@Override
public <S, E> Wrapper between(S start, E end, BiPredicate<S, E> isEffective) {
addWhereQueryCondition(queryColumn.between(start, end, isEffective));
return queryWrapper;
}
@Override
public Wrapper notBetween(Object start, Object end) {
if (queryWrapper != null) {
queryWrapper.addWhereQueryCondition(queryColumn.notBetween(start, end), connector);
}
addWhereQueryCondition(queryColumn.notBetween(start, end));
return queryWrapper;
}
public <S, E> Wrapper notBetween(S start, E end, BiPredicate<S, E> when) {
if (queryWrapper != null) {
queryWrapper.addWhereQueryCondition(queryColumn.notBetween(start, end, when), connector);
}
@Override
public Wrapper notBetween(Object start, Object end, boolean isEffective) {
addWhereQueryCondition(queryColumn.notBetween(start, end, isEffective));
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.QueryWrapperAdapter;
import com.mybatisflex.core.table.*;
import com.mybatisflex.core.update.PropertySetter;
import com.mybatisflex.core.util.LambdaGetter;
import com.mybatisflex.core.util.SqlUtil;
@ -37,7 +38,7 @@ import java.util.stream.Collectors;
* @author 王帅
* @since 2023-07-22
*/
public class DbChain extends QueryWrapperAdapter<DbChain> {
public class DbChain extends QueryWrapperAdapter<DbChain> implements PropertySetter<DbChain> {
private String schema;
private String tableName;
@ -108,18 +109,39 @@ public class DbChain extends QueryWrapperAdapter<DbChain> {
return this;
}
public DbChain set(String column, Object value) {
getRow().set(column, value);
@Override
public DbChain set(String property, Object value, boolean isEffective) {
getRow().set(property, value, isEffective);
return this;
}
public DbChain set(QueryColumn column, Object value) {
getRow().set(column, value);
@Override
public DbChain set(QueryColumn property, Object value, boolean isEffective) {
getRow().set(property, value, isEffective);
return this;
}
public <T> DbChain set(LambdaGetter<T> column, Object value) {
getRow().set(column, value);
@Override
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;
}

View File

@ -29,6 +29,8 @@ import java.sql.Time;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.util.*;
import java.util.function.BooleanSupplier;
import java.util.function.Predicate;
public class Row extends LinkedHashMap<String, Object> implements UpdateWrapper {
@ -93,8 +95,73 @@ public class Row extends LinkedHashMap<String, Object> implements UpdateWrapper
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
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) {
if (StringUtil.isBlank(column)) {
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);
}
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) {
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
*/
@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 T entity;
@ -82,64 +82,40 @@ public class UpdateChain<T> extends QueryWrapperAdapter<UpdateChain<T>> {
return new UpdateChain<>(baseMapper);
}
public UpdateChain<T> set(String property, Object value, boolean condition) {
entityWrapper.set(property, value, condition);
@Override
public UpdateChain<T> set(String property, Object value, boolean isEffective) {
entityWrapper.set(property, value, isEffective);
return this;
}
public UpdateChain<T> set(String property, Object value) {
entityWrapper.set(property, value);
@Override
public UpdateChain<T> set(QueryColumn queryColumn, Object value, boolean isEffective) {
entityWrapper.set(queryColumn, value, isEffective);
return this;
}
public <L> UpdateChain<T> set(LambdaGetter<L> getter, Object value, boolean condition) {
entityWrapper.set(getter, value, condition);
return this;
}
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);
@Override
public <L> UpdateChain<T> set(LambdaGetter<L> getter, Object value, boolean isEffective) {
entityWrapper.set(getter, value, isEffective);
return this;
}
public UpdateChain<T> set(QueryColumn queryColumn, Object value) {
entityWrapper.set(queryColumn, value);
@Override
public UpdateChain<T> setRaw(String property, Object value, boolean isEffective) {
entityWrapper.setRaw(property, value, isEffective);
return this;
}
public UpdateChain<T> setRaw(String property, Object value, boolean condition) {
entityWrapper.setRaw(property, value, condition);
@Override
public UpdateChain<T> setRaw(QueryColumn queryColumn, Object value, boolean isEffective) {
entityWrapper.setRaw(queryColumn, value, isEffective);
return this;
}
public UpdateChain<T> setRaw(String property, Object value) {
entityWrapper.setRaw(property, value);
return this;
}
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);
@Override
public <L> UpdateChain<T> setRaw(LambdaGetter<L> getter, Object value, boolean isEffective) {
entityWrapper.setRaw(getter, value, isEffective);
return this;
}

View File

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