From 3d0854a2d20881d6fabfa6e308ca646c3da26a59 Mon Sep 17 00:00:00 2001 From: Suomm <1474983351@qq.com> Date: Wed, 16 Aug 2023 17:14:01 +0800 Subject: [PATCH 01/12] =?UTF-8?q?refactor:=20=E7=A7=BB=E9=99=A4=E6=97=A0?= =?UTF-8?q?=E7=94=A8=E6=96=B9=E6=B3=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mybatisflex/core/query/Brackets.java | 21 ------------------- 1 file changed, 21 deletions(-) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/Brackets.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/Brackets.java index 2525571f..6f102929 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/Brackets.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/Brackets.java @@ -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 QueryCondition when(Predicate fn) { - return childCondition.when(fn); - } - @Override protected QueryCondition getNextEffectiveCondition() { return childCondition.getNextEffectiveCondition(); From 4ed44b7b16e27e71e2f2addb58ec011c5d632ab4 Mon Sep 17 00:00:00 2001 From: Suomm <1474983351@qq.com> Date: Wed, 16 Aug 2023 17:15:22 +0800 Subject: [PATCH 02/12] =?UTF-8?q?refactor:=20=E6=B7=BB=E5=8A=A0=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=20QueryCondition=20=E7=9A=84=E9=87=8D=E8=BD=BD?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mybatisflex/core/query/QueryCondition.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryCondition.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryCondition.java index a049e911..375bc85a 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryCondition.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryCondition.java @@ -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 { 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() { From 24c7f229cb4b7ded1e8707cbfc46781a9296010c Mon Sep 17 00:00:00 2001 From: Suomm <1474983351@qq.com> Date: Wed, 16 Aug 2023 17:15:57 +0800 Subject: [PATCH 03/12] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20NOT=5FEQUALS?= =?UTF-8?q?=20=E6=93=8D=E4=BD=9C=E7=AC=A6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/mybatisflex/core/constant/SqlOperator.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/constant/SqlOperator.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/constant/SqlOperator.java index bea594f0..fba21076 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/constant/SqlOperator.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/constant/SqlOperator.java @@ -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; } + } From fe648c4720f78e3af28e2c5db856b9c07c71a060 Mon Sep 17 00:00:00 2001 From: Suomm <1474983351@qq.com> Date: Wed, 16 Aug 2023 17:16:35 +0800 Subject: [PATCH 04/12] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6=E6=9E=84=E5=BB=BA=E6=8E=A5=E5=8F=A3=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybatisflex/core/query/Conditional.java | 692 ++++++++++++++++++ 1 file changed, 692 insertions(+) create mode 100644 mybatis-flex-core/src/main/java/com/mybatisflex/core/query/Conditional.java diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/Conditional.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/Conditional.java new file mode 100644 index 00000000..a210e994 --- /dev/null +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/Conditional.java @@ -0,0 +1,692 @@ +/* + * Copyright (c) 2022-2023, Mybatis-Flex (fuhai999@gmail.com). + *

+ * 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 + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * 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 链式调用返回值类型 + * @author 王帅 + * @since 2023-08-12 + */ +@SuppressWarnings("unused") +public interface Conditional { + + /** + * 等于 {@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 是否生效 + */ + R eq(T value, Predicate 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 是否有效 + */ + R ne(T value, Predicate 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 是否有效 + */ + R gt(T value, Predicate 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 是否有效 + */ + R ge(T value, Predicate 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 是否有效 + */ + R lt(T value, Predicate 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 是否有效 + */ + R le(T value, Predicate 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 是否有效 + */ + R in(T[] value, Predicate 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 是否有效 + */ + > R in(T value, Predicate 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 是否有效 + */ + R notIn(T[] value, Predicate 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 是否有效 + */ + > R notIn(T value, Predicate 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 是否有效 + */ + R between(S start, E end, BiPredicate 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 是否有效 + */ + R notBetween(S start, E end, BiPredicate 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 是否有效 + */ + R like(T value, Predicate 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 是否有效 + */ + R likeLeft(T value, Predicate 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 是否有效 + */ + R likeRight(T value, Predicate 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 是否有效 + */ + R notLike(T value, Predicate 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 是否有效 + */ + R notLikeLeft(T value, Predicate 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 是否有效 + */ + R notLikeRight(T value, Predicate 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()); + } + +} From 958f16fa159d78369995e66ee9e0b1e285ecf9f6 Mon Sep 17 00:00:00 2001 From: Suomm <1474983351@qq.com> Date: Wed, 16 Aug 2023 17:18:31 +0800 Subject: [PATCH 05/12] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=9B=B4?= =?UTF-8?q?=E5=A4=9A=E5=8A=A8=E6=80=81=E6=9D=A1=E4=BB=B6=E9=87=8D=E8=BD=BD?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybatisflex/core/query/QueryColumn.java | 871 +++++++++++------- 1 file changed, 557 insertions(+), 314 deletions(-) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryColumn.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryColumn.java index 2222ea52..0cf4cfe2 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryColumn.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryColumn.java @@ -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.table.TableDef; @@ -25,12 +26,13 @@ import com.mybatisflex.core.util.*; import java.util.Collection; import java.util.List; import java.util.function.BiPredicate; +import java.util.function.BooleanSupplier; import java.util.function.Predicate; /** * 查询列,描述的是一张表的字段 */ -public class QueryColumn implements CloneSupport { +public class QueryColumn implements CloneSupport, Conditional { protected QueryTable table; protected String name; @@ -135,459 +137,700 @@ public class QueryColumn implements CloneSupport { // query methods /////// - /** - * equals - * - * @param value - */ + @Override public QueryCondition eq(Object value) { if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { return QueryCondition.createEmpty(); } - return QueryCondition.create(this, SqlConsts.EQUALS, value); + return QueryCondition.create(this, SqlOperator.EQUALS, value); } - - public QueryCondition eq(T value, Predicate fn) { + @Override + public QueryCondition eq(Object value, boolean isEffective) { if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { return QueryCondition.createEmpty(); } - return QueryCondition.create(this, SqlConsts.EQUALS, value).when(fn.test(value)); + return QueryCondition.create(this, SqlOperator.EQUALS, value).when(isEffective); } + @Override + public QueryCondition eq(Object value, BooleanSupplier isEffective) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.EQUALS, value).when(isEffective); + } - /** - * not equals != - * - * @param value - */ + @Override + public QueryCondition eq(T value, Predicate isEffective) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.EQUALS, value).when(isEffective.test(value)); + } + + @Override public QueryCondition ne(Object value) { if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { return QueryCondition.createEmpty(); } - return QueryCondition.create(this, SqlConsts.NOT_EQUALS, value); + return QueryCondition.create(this, SqlOperator.NOT_EQUALS, value); } - public QueryCondition ne(T value, Predicate fn) { + @Override + public QueryCondition ne(Object value, boolean isEffective) { if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { return QueryCondition.createEmpty(); } - return QueryCondition.create(this, SqlConsts.NOT_EQUALS, value).when(fn.test(value)); + return QueryCondition.create(this, SqlOperator.NOT_EQUALS, value).when(isEffective); } - - /** - * like %% - * - * @param value - */ - public QueryCondition like(Object value) { + @Override + public QueryCondition ne(Object value, BooleanSupplier isEffective) { if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { return QueryCondition.createEmpty(); } - return QueryCondition.create(this, SqlConsts.LIKE, "%" + value + "%"); + return QueryCondition.create(this, SqlOperator.NOT_EQUALS, value).when(isEffective); } - public QueryCondition like(T value, Predicate fn) { + @Override + public QueryCondition ne(T value, Predicate isEffective) { if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { return QueryCondition.createEmpty(); } - return QueryCondition.create(this, SqlConsts.LIKE, "%" + value + "%").when(fn.test(value)); + return QueryCondition.create(this, SqlOperator.NOT_EQUALS, value).when(isEffective.test(value)); } - - public QueryCondition likeLeft(Object value) { - if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { - return QueryCondition.createEmpty(); - } - return QueryCondition.create(this, SqlConsts.LIKE, value + "%"); - } - - public QueryCondition likeLeft(T value, Predicate fn) { - if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { - return QueryCondition.createEmpty(); - } - return QueryCondition.create(this, SqlConsts.LIKE, value + "%").when(fn.test(value)); - } - - - public QueryCondition likeRight(Object value) { - if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { - return QueryCondition.createEmpty(); - } - return QueryCondition.create(this, SqlConsts.LIKE, "%" + value); - } - - public QueryCondition likeRight(T value, Predicate fn) { - if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { - return QueryCondition.createEmpty(); - } - return QueryCondition.create(this, SqlConsts.LIKE, "%" + value).when(fn.test(value)); - } - - - public QueryCondition likeRaw(Object value) { - if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { - return QueryCondition.createEmpty(); - } - return QueryCondition.create(this, SqlConsts.LIKE, value); - } - - public QueryCondition likeRaw(T value, Predicate fn) { - if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { - return QueryCondition.createEmpty(); - } - return QueryCondition.create(this, SqlConsts.LIKE, value).when(fn.test(value)); - } - - - /** - * not like %% - * - * @param value - */ - public QueryCondition notLike(Object value) { - if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { - return QueryCondition.createEmpty(); - } - return QueryCondition.create(this, SqlConsts.NOT_LIKE, "%" + value + "%"); - } - - public QueryCondition notLike(T value, Predicate fn) { - if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { - return QueryCondition.createEmpty(); - } - return QueryCondition.create(this, SqlConsts.NOT_LIKE, "%" + value + "%").when(fn.test(value)); - } - - - public QueryCondition notLikeLeft(Object value) { - if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { - return QueryCondition.createEmpty(); - } - return QueryCondition.create(this, SqlConsts.NOT_LIKE, value + "%"); - } - - public QueryCondition notLikeLeft(T value, Predicate fn) { - if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { - return QueryCondition.createEmpty(); - } - return QueryCondition.create(this, SqlConsts.NOT_LIKE, value + "%").when(fn.test(value)); - } - - - public QueryCondition notLikeRight(Object value) { - if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { - return QueryCondition.createEmpty(); - } - return QueryCondition.create(this, SqlConsts.NOT_LIKE, "%" + value); - } - - public QueryCondition notLikeRight(T value, Predicate fn) { - if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { - return QueryCondition.createEmpty(); - } - return QueryCondition.create(this, SqlConsts.NOT_LIKE, "%" + value).when(fn.test(value)); - } - - - /** - * 大于 greater than - * - * @param value - */ + @Override public QueryCondition gt(Object value) { if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { return QueryCondition.createEmpty(); } - return QueryCondition.create(this, SqlConsts.GT, value); + return QueryCondition.create(this, SqlOperator.GT, value); } - public QueryCondition gt(T value, Predicate fn) { + @Override + public QueryCondition gt(Object value, boolean isEffective) { if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { return QueryCondition.createEmpty(); } - return QueryCondition.create(this, SqlConsts.GT, value).when(fn.test(value)); + return QueryCondition.create(this, SqlOperator.GT, value).when(isEffective); } - /** - * 大于等于 greater or equal - * - * @param value - */ + @Override + public QueryCondition gt(Object value, BooleanSupplier isEffective) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.GT, value).when(isEffective); + } + + @Override + public QueryCondition gt(T value, Predicate isEffective) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.GT, value).when(isEffective.test(value)); + } + + @Override public QueryCondition ge(Object value) { if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { return QueryCondition.createEmpty(); } - return QueryCondition.create(this, SqlConsts.GE, value); + return QueryCondition.create(this, SqlOperator.GE, value); } - public QueryCondition ge(T value, Predicate fn) { + @Override + public QueryCondition ge(Object value, boolean isEffective) { if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { return QueryCondition.createEmpty(); } - return QueryCondition.create(this, SqlConsts.GE, value).when(fn.test(value)); + return QueryCondition.create(this, SqlOperator.GE, value).when(isEffective); } - /** - * 小于 less than - * - * @param value - */ + @Override + public QueryCondition ge(Object value, BooleanSupplier isEffective) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.GE, value).when(isEffective); + } + + @Override + public QueryCondition ge(T value, Predicate isEffective) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.GE, value).when(isEffective.test(value)); + } + + @Override public QueryCondition lt(Object value) { if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { return QueryCondition.createEmpty(); } - return QueryCondition.create(this, SqlConsts.LT, value); + return QueryCondition.create(this, SqlOperator.LT, value); } - public QueryCondition lt(T value, Predicate fn) { + @Override + public QueryCondition lt(Object value, boolean isEffective) { if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { return QueryCondition.createEmpty(); } - return QueryCondition.create(this, SqlConsts.LT, value).when(fn.test(value)); + return QueryCondition.create(this, SqlOperator.LT, value).when(isEffective); } - /** - * 小于等于 less or equal - * - * @param value - */ + @Override + public QueryCondition lt(Object value, BooleanSupplier isEffective) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.LT, value).when(isEffective); + } + + @Override + public QueryCondition lt(T value, Predicate isEffective) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.LT, value).when(isEffective.test(value)); + } + + @Override public QueryCondition le(Object value) { if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { return QueryCondition.createEmpty(); } - return QueryCondition.create(this, SqlConsts.LE, value); + return QueryCondition.create(this, SqlOperator.LE, value); } - public QueryCondition le(T value, Predicate fn) { + @Override + public QueryCondition le(Object value, boolean isEffective) { if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { return QueryCondition.createEmpty(); } - return QueryCondition.create(this, SqlConsts.LE, value).when(fn.test(value)); + return QueryCondition.create(this, SqlOperator.LE, value).when(isEffective); } - - /** - * IS NULL - * - * @return QueryCondition - */ - public QueryCondition isNull() { - return QueryCondition.create(this, SqlConsts.IS_NULL, null); - } - - /** - * @deprecated 无法推断泛型 - */ - @Deprecated - public QueryCondition isNull(Predicate fn) { - return QueryCondition.create(this, SqlConsts.IS_NULL, null).when(fn); - } - - - /** - * IS NOT NULL - * - * @return QueryCondition - */ - public QueryCondition isNotNull() { - return QueryCondition.create(this, SqlConsts.IS_NOT_NULL, null); - } - - /** - * @deprecated 无法推断泛型 - */ - @Deprecated - public QueryCondition isNotNull(Predicate fn) { - return QueryCondition.create(this, SqlConsts.IS_NOT_NULL, null).when(fn); - } - - - /** - * in arrays - * - * @param arrays - * @return QueryCondition - */ - public QueryCondition in(Object... arrays) { - //忽略 QueryWrapper.in("name", null) 的情况 - if (arrays == null || arrays.length == 0 || (arrays.length == 1 && arrays[0] == null) || QueryColumnBehavior.shouldIgnoreValue(arrays)) { + @Override + public QueryCondition le(Object value, BooleanSupplier isEffective) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { return QueryCondition.createEmpty(); } - - if (arrays.length == 1 && QueryColumnBehavior.isSmartConvertInToEquals()) { - return QueryCondition.create(this, SqlConsts.EQUALS, arrays[0]); - } - - return QueryCondition.create(this, SqlConsts.IN, arrays); + return QueryCondition.create(this, SqlOperator.LE, value).when(isEffective); } - - public QueryCondition in(T[] arrays, Predicate fn) { - //忽略 QueryWrapper.in("name", null) 的情况 - if (arrays == null || arrays.length == 0 || (arrays.length == 1 && arrays[0] == null) || QueryColumnBehavior.shouldIgnoreValue(arrays)) { + @Override + public QueryCondition le(T value, Predicate isEffective) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { return QueryCondition.createEmpty(); } - - if (arrays.length == 1 && QueryColumnBehavior.isSmartConvertInToEquals()) { - return QueryCondition.create(this, SqlConsts.EQUALS, arrays[0]); - } - - return QueryCondition.create(this, SqlConsts.IN, arrays).when(fn.test(arrays)); + return QueryCondition.create(this, SqlOperator.LE, value).when(isEffective.test(value)); } - /** - * in child select - * - * @param queryWrapper - * @return QueryCondition - */ + @Override + public QueryCondition in(Object... value) { + if (value == null || value.length == 0 || (value.length == 1 && value[0] == null) || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + if (value.length == 1 && QueryColumnBehavior.isSmartConvertInToEquals()) { + return QueryCondition.create(this, SqlOperator.EQUALS, value[0]); + } + return QueryCondition.create(this, SqlConsts.IN, value); + } + + @Override + public QueryCondition in(Object[] value, boolean isEffective) { + if (value == null || value.length == 0 || (value.length == 1 && value[0] == null) || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + if (value.length == 1 && QueryColumnBehavior.isSmartConvertInToEquals()) { + return QueryCondition.create(this, SqlOperator.EQUALS, value[0]).when(isEffective); + } + return QueryCondition.create(this, SqlConsts.IN, value).when(isEffective); + } + + @Override + public QueryCondition in(Object[] value, BooleanSupplier isEffective) { + if (value == null || value.length == 0 || (value.length == 1 && value[0] == null) || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + if (value.length == 1 && QueryColumnBehavior.isSmartConvertInToEquals()) { + return QueryCondition.create(this, SqlOperator.EQUALS, value[0]).when(isEffective); + } + return QueryCondition.create(this, SqlConsts.IN, value).when(isEffective); + } + + @Override + public QueryCondition in(T[] value, Predicate isEffective) { + if (value == null || value.length == 0 || (value.length == 1 && value[0] == null) || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + if (value.length == 1 && QueryColumnBehavior.isSmartConvertInToEquals()) { + return QueryCondition.create(this, SqlOperator.EQUALS, value[0]).when(isEffective.test(value)); + } + return QueryCondition.create(this, SqlConsts.IN, value).when(isEffective.test(value)); + } + + @Override + public QueryCondition in(Collection value) { + if (value == null) { + return QueryCondition.createEmpty(); + } + return in(value.toArray()); + } + + @Override + public QueryCondition in(Collection value, boolean isEffective) { + if (value == null) { + return QueryCondition.createEmpty(); + } + return in(value.toArray()).when(isEffective); + } + + @Override + public QueryCondition in(Collection value, BooleanSupplier isEffective) { + if (value == null) { + return QueryCondition.createEmpty(); + } + return in(value.toArray()).when(isEffective); + } + + @Override + public > QueryCondition in(T value, Predicate isEffective) { + if (value == null) { + return QueryCondition.createEmpty(); + } + return in(value.toArray()).when(isEffective.test(value)); + } + + @Override public QueryCondition in(QueryWrapper queryWrapper) { - if (queryWrapper == null || QueryColumnBehavior.shouldIgnoreValue(queryWrapper)) { + if (queryWrapper == null) { return QueryCondition.createEmpty(); } - return QueryCondition.create(this, SqlConsts.IN, queryWrapper); + return QueryCondition.create(this, SqlOperator.IN, queryWrapper); } - - /** - * @deprecated 无法推断泛型 - */ - @Deprecated - public QueryCondition in(QueryWrapper queryWrapper, Predicate fn) { - if (queryWrapper == null || QueryColumnBehavior.shouldIgnoreValue(queryWrapper)) { + @Override + public QueryCondition in(QueryWrapper queryWrapper, boolean isEffective) { + if (queryWrapper == null) { return QueryCondition.createEmpty(); } - return QueryCondition.create(this, SqlConsts.IN, queryWrapper).when(fn); + return QueryCondition.create(this, SqlOperator.IN, queryWrapper).when(isEffective); } - - /** - * in Collection - * - * @param collection - * @return QueryCondition - */ - public QueryCondition in(Collection collection) { - if (collection == null || collection.isEmpty() || QueryColumnBehavior.shouldIgnoreValue(collection)) { + @Override + public QueryCondition in(QueryWrapper queryWrapper, BooleanSupplier isEffective) { + if (queryWrapper == null) { return QueryCondition.createEmpty(); } - return in(collection.toArray()); + return QueryCondition.create(this, SqlOperator.IN, queryWrapper).when(isEffective); } - public > QueryCondition in(T collection, Predicate fn) { - if (collection == null || collection.isEmpty() || QueryColumnBehavior.shouldIgnoreValue(collection)) { + @Override + public QueryCondition notIn(Object... value) { + if (value == null || value.length == 0 || (value.length == 1 && value[0] == null) || QueryColumnBehavior.shouldIgnoreValue(value)) { return QueryCondition.createEmpty(); } - return in(collection.toArray()).when(fn.test(collection)); + if (value.length == 1 && QueryColumnBehavior.isSmartConvertInToEquals()) { + return QueryCondition.create(this, SqlOperator.NOT_EQUALS, value[0]); + } + return QueryCondition.create(this, SqlConsts.NOT_IN, value); } - /** - * not int arrays - * - * @param arrays - * @return QueryCondition - */ - public QueryCondition notIn(Object... arrays) { - //忽略 QueryWrapper.notIn("name", null) 的情况 - if (arrays == null || arrays.length == 0 || (arrays.length == 1 && arrays[0] == null) || QueryColumnBehavior.shouldIgnoreValue(arrays)) { + @Override + public QueryCondition notIn(Object[] value, boolean isEffective) { + if (value == null || value.length == 0 || (value.length == 1 && value[0] == null) || QueryColumnBehavior.shouldIgnoreValue(value)) { return QueryCondition.createEmpty(); } - - if (arrays.length == 1 && QueryColumnBehavior.isSmartConvertInToEquals()) { - return QueryCondition.create(this, SqlConsts.NOT_EQUALS, arrays[0]); + if (value.length == 1 && QueryColumnBehavior.isSmartConvertInToEquals()) { + return QueryCondition.create(this, SqlOperator.NOT_EQUALS, value[0]).when(isEffective); } - - return QueryCondition.create(this, SqlConsts.NOT_IN, arrays); + return QueryCondition.create(this, SqlConsts.NOT_IN, value).when(isEffective); } - public QueryCondition notIn(T[] arrays, Predicate fn) { - //忽略 QueryWrapper.notIn("name", null) 的情况 - if (arrays == null || arrays.length == 0 || (arrays.length == 1 && arrays[0] == null) || QueryColumnBehavior.shouldIgnoreValue(arrays)) { + @Override + public QueryCondition notIn(Object[] value, BooleanSupplier isEffective) { + if (value == null || value.length == 0 || (value.length == 1 && value[0] == null) || QueryColumnBehavior.shouldIgnoreValue(value)) { return QueryCondition.createEmpty(); } - - if (arrays.length == 1 && QueryColumnBehavior.isSmartConvertInToEquals()) { - return QueryCondition.create(this, SqlConsts.NOT_EQUALS, arrays[0]); + if (value.length == 1 && QueryColumnBehavior.isSmartConvertInToEquals()) { + return QueryCondition.create(this, SqlOperator.NOT_EQUALS, value[0]).when(isEffective); } - - return QueryCondition.create(this, SqlConsts.NOT_IN, arrays).when(fn.test(arrays)); + return QueryCondition.create(this, SqlConsts.NOT_IN, value).when(isEffective); } - - /** - * not in Collection - * - * @param collection - * @return QueryCondition - */ - public QueryCondition notIn(Collection collection) { - if (collection == null || collection.isEmpty() || QueryColumnBehavior.shouldIgnoreValue(collection)) { + @Override + public QueryCondition notIn(T[] value, Predicate isEffective) { + if (value == null || value.length == 0 || (value.length == 1 && value[0] == null) || QueryColumnBehavior.shouldIgnoreValue(value)) { return QueryCondition.createEmpty(); } - return notIn(collection.toArray()); + if (value.length == 1 && QueryColumnBehavior.isSmartConvertInToEquals()) { + return QueryCondition.create(this, SqlOperator.NOT_EQUALS, value[0]).when(isEffective.test(value)); + } + return QueryCondition.create(this, SqlConsts.NOT_IN, value).when(isEffective.test(value)); } - public > QueryCondition notIn(T collection, Predicate fn) { - if (collection == null || collection.isEmpty() || QueryColumnBehavior.shouldIgnoreValue(collection)) { + @Override + public QueryCondition notIn(Collection value) { + if (value == null) { return QueryCondition.createEmpty(); } - return notIn(collection.toArray()).when(fn.test(collection)); + return notIn(value.toArray()); } - /** - * not in child select - * - * @param queryWrapper - */ + @Override + public QueryCondition notIn(Collection value, boolean isEffective) { + if (value == null) { + return QueryCondition.createEmpty(); + } + return notIn(value.toArray()).when(isEffective); + } + + @Override + public QueryCondition notIn(Collection value, BooleanSupplier isEffective) { + if (value == null) { + return QueryCondition.createEmpty(); + } + return notIn(value.toArray()).when(isEffective); + } + + @Override + public > QueryCondition notIn(T value, Predicate isEffective) { + if (value == null) { + return QueryCondition.createEmpty(); + } + return notIn(value.toArray()).when(isEffective.test(value)); + } + + @Override public QueryCondition notIn(QueryWrapper queryWrapper) { - if (queryWrapper == null || QueryColumnBehavior.shouldIgnoreValue(queryWrapper)) { + if (queryWrapper == null) { return QueryCondition.createEmpty(); } - return QueryCondition.create(this, SqlConsts.NOT_IN, queryWrapper); + return QueryCondition.create(this, SqlOperator.NOT_IN, queryWrapper); } - - /** - * @deprecated 无法推断泛型 - */ - @Deprecated - public QueryCondition notIn(QueryWrapper queryWrapper, Predicate fn) { - if (queryWrapper == null || QueryColumnBehavior.shouldIgnoreValue(queryWrapper)) { + @Override + public QueryCondition notIn(QueryWrapper queryWrapper, boolean isEffective) { + if (queryWrapper == null) { return QueryCondition.createEmpty(); } - return QueryCondition.create(this, SqlConsts.NOT_IN, queryWrapper).when(fn); + return QueryCondition.create(this, SqlOperator.NOT_IN, queryWrapper).when(isEffective); } + @Override + public QueryCondition notIn(QueryWrapper queryWrapper, BooleanSupplier isEffective) { + if (queryWrapper == null) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.NOT_IN, queryWrapper).when(isEffective); + } - /** - * between - * - * @param start - * @param end - */ + @Override public QueryCondition between(Object start, Object end) { - return QueryCondition.create(this, SqlConsts.BETWEEN, new Object[]{start, end}); + return QueryCondition.create(this, SqlOperator.BETWEEN, new Object[]{start, end}); } - public QueryCondition between(S start, E end, BiPredicate fn) { - return QueryCondition.create(this, SqlConsts.BETWEEN, new Object[]{start, end}).when(fn.test(start, end)); + @Override + public QueryCondition between(Object start, Object end, boolean isEffective) { + return QueryCondition.create(this, SqlOperator.BETWEEN, new Object[]{start, end}).when(isEffective); } + @Override + public QueryCondition between(Object start, Object end, BooleanSupplier isEffective) { + return QueryCondition.create(this, SqlOperator.BETWEEN, new Object[]{start, end}).when(isEffective); + } + + @Override + public QueryCondition between(S start, E end, BiPredicate isEffective) { + return QueryCondition.create(this, SqlOperator.BETWEEN, new Object[]{start, end}).when(isEffective.test(start, end)); + } + + @Override + public QueryCondition notBetween(Object start, Object end) { + return QueryCondition.create(this, SqlOperator.NOT_BETWEEN, new Object[]{start, end}); + } + + @Override + public QueryCondition notBetween(Object start, Object end, boolean isEffective) { + return QueryCondition.create(this, SqlOperator.NOT_BETWEEN, new Object[]{start, end}).when(isEffective); + } + + @Override + public QueryCondition notBetween(Object start, Object end, BooleanSupplier isEffective) { + return QueryCondition.create(this, SqlOperator.NOT_BETWEEN, new Object[]{start, end}).when(isEffective); + } + + @Override + public QueryCondition notBetween(S start, E end, BiPredicate isEffective) { + return QueryCondition.create(this, SqlOperator.NOT_BETWEEN, new Object[]{start, end}).when(isEffective.test(start, end)); + } + + @Override + public QueryCondition like(Object value) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.LIKE, "%" + value + "%"); + } + + @Override + public QueryCondition like(Object value, boolean isEffective) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.LIKE, "%" + value + "%").when(isEffective); + } + + @Override + public QueryCondition like(Object value, BooleanSupplier isEffective) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.LIKE, "%" + value + "%").when(isEffective); + } + + @Override + public QueryCondition like(T value, Predicate isEffective) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.LIKE, "%" + value + "%").when(isEffective.test(value)); + } + + @Override + public QueryCondition likeLeft(Object value) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.LIKE, value + "%"); + } + + @Override + public QueryCondition likeLeft(Object value, boolean isEffective) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.LIKE, value + "%").when(isEffective); + } + + @Override + public QueryCondition likeLeft(Object value, BooleanSupplier isEffective) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.LIKE, value + "%").when(isEffective); + } + + @Override + public QueryCondition likeLeft(T value, Predicate isEffective) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.LIKE, value + "%").when(isEffective.test(value)); + } + + @Override + public QueryCondition likeRight(Object value) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.LIKE, "%" + value); + } + + @Override + public QueryCondition likeRight(Object value, boolean isEffective) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.LIKE, "%" + value).when(isEffective); + } + + @Override + public QueryCondition likeRight(Object value, BooleanSupplier isEffective) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.LIKE, "%" + value).when(isEffective); + } + + @Override + public QueryCondition likeRight(T value, Predicate isEffective) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.LIKE, "%" + value).when(isEffective.test(value)); + } /** - * not between - * - * @param start - * @param end + * {@code LIKE value} */ - public QueryCondition notBetween(Object start, Object end) { - return QueryCondition.create(this, SqlConsts.NOT_BETWEEN, new Object[]{start, end}); + public QueryCondition likeRaw(Object value) { + return likeRaw(value, true); } - public QueryCondition notBetween(S start, E end, BiPredicate fn) { - return QueryCondition.create(this, SqlConsts.NOT_BETWEEN, new Object[]{start, end}).when(fn.test(start, end)); + /** + * {@code LIKE value} + */ + public QueryCondition likeRaw(Object value, boolean isEffective) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.LIKE, value).when(isEffective); + } + + /** + * {@code LIKE value} + */ + public QueryCondition likeRaw(Object value, BooleanSupplier isEffective) { + return likeRaw(value, isEffective.getAsBoolean()); + } + + /** + * {@code LIKE value} + */ + public QueryCondition likeRaw(T value, Predicate isEffective) { + return likeRaw(value, isEffective.test(value)); + } + + @Override + public QueryCondition notLike(Object value) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value + "%"); + } + + @Override + public QueryCondition notLike(Object value, boolean isEffective) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value + "%").when(isEffective); + } + + @Override + public QueryCondition notLike(Object value, BooleanSupplier isEffective) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value + "%").when(isEffective); + } + + @Override + public QueryCondition notLike(T value, Predicate isEffective) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value + "%").when(isEffective.test(value)); + } + + @Override + public QueryCondition notLikeLeft(Object value) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.NOT_LIKE, value + "%"); + } + + @Override + public QueryCondition notLikeLeft(Object value, boolean isEffective) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.NOT_LIKE, value + "%").when(isEffective); + } + + @Override + public QueryCondition notLikeLeft(Object value, BooleanSupplier isEffective) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.NOT_LIKE, value + "%").when(isEffective); + } + + @Override + public QueryCondition notLikeLeft(T value, Predicate isEffective) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.NOT_LIKE, value + "%").when(isEffective.test(value)); + } + + @Override + public QueryCondition notLikeRight(Object value) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value); + } + + @Override + public QueryCondition notLikeRight(Object value, boolean isEffective) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value).when(isEffective); + } + + @Override + public QueryCondition notLikeRight(Object value, BooleanSupplier isEffective) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value).when(isEffective); + } + + @Override + public QueryCondition notLikeRight(T value, Predicate isEffective) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.NOT_LIKE, "%" + value).when(isEffective.test(value)); + } + + /** + * {@code NOT LIKE value} + */ + public QueryCondition notLikeRaw(Object value) { + return likeRaw(value, true); + } + + /** + * {@code NOT LIKE value} + */ + public QueryCondition notLikeRaw(Object value, boolean isEffective) { + if (value == null || QueryColumnBehavior.shouldIgnoreValue(value)) { + return QueryCondition.createEmpty(); + } + return QueryCondition.create(this, SqlOperator.NOT_LIKE, value).when(isEffective); + } + + /** + * {@code NOT LIKE value} + */ + public QueryCondition notLikeRaw(Object value, BooleanSupplier isEffective) { + return likeRaw(value, isEffective.getAsBoolean()); + } + + /** + * {@code NOT LIKE value} + */ + public QueryCondition notLikeRaw(T value, Predicate isEffective) { + return likeRaw(value, isEffective.test(value)); + } + + @Override + public QueryCondition isNull(boolean isEffective) { + return QueryCondition.create(this, SqlOperator.IS_NULL, null).when(isEffective); + } + + @Override + public QueryCondition isNotNull(boolean isEffective) { + return QueryCondition.create(this, SqlOperator.IS_NOT_NULL, null).when(isEffective); } From bb4c99c1de3306d2e31a82e5d731237fc080adbd Mon Sep 17 00:00:00 2001 From: Suomm <1474983351@qq.com> Date: Wed, 16 Aug 2023 17:19:40 +0800 Subject: [PATCH 06/12] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=9B=B4?= =?UTF-8?q?=E5=A4=9A=20Lambda=20=E5=8A=A8=E6=80=81=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E9=87=8D=E8=BD=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/query/QueryConditionBuilder.java | 772 ++++++++++-------- 1 file changed, 454 insertions(+), 318 deletions(-) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryConditionBuilder.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryConditionBuilder.java index fe8714e8..d00e6b2e 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryConditionBuilder.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryConditionBuilder.java @@ -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 { +public class QueryConditionBuilder implements Conditional { private final Wrapper queryWrapper; private final QueryColumn queryColumn; @@ -35,479 +36,614 @@ public class QueryConditionBuilder { 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 Wrapper eq(T value, Predicate 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 Wrapper eq(T value, Predicate isEffective) { + addWhereQueryCondition(queryColumn.eq(value, isEffective)); + return queryWrapper; + } + + /** + * 等于 {@code =} + */ public Wrapper eq(LambdaGetter value) { - return eq(LambdaUtil.getQueryColumn(value)); + return eq(LambdaUtil.getQueryColumn(value), true); } /** - * @deprecated {@link Predicate} 泛型参数无效 + * 等于 {@code =} */ - @Deprecated - public Wrapper eq(LambdaGetter value, Predicate when) { - if (value != null) { - queryWrapper.addWhereQueryCondition(queryColumn.eq(value).when(when), connector); - } - return queryWrapper; + public Wrapper eq(LambdaGetter value, boolean isEffective) { + return eq(LambdaUtil.getQueryColumn(value), isEffective); } - /** - * not equals != - * - * @param value + * 等于 {@code =} */ + public Wrapper eq(LambdaGetter 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 Wrapper ne(T value, Predicate 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 Wrapper ne(T value, Predicate isEffective) { + addWhereQueryCondition(queryColumn.ne(value, isEffective)); + return queryWrapper; + } + + /** + * 不等于 {@code !=} + */ public Wrapper ne(LambdaGetter value) { - return ne(LambdaUtil.getQueryColumn(value)); - } - - - /** - * @deprecated {@link Predicate} 泛型参数无效 - */ - @Deprecated - public Wrapper ne(LambdaGetter value, Predicate 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 Wrapper like(T value, Predicate 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 Wrapper likeLeft(T value, Predicate 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 Wrapper likeRight(T value, Predicate 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 Wrapper ne(LambdaGetter value, boolean isEffective) { + return ne(LambdaUtil.getQueryColumn(value), isEffective); + } + + /** + * 不等于 {@code !=} + */ + public Wrapper ne(LambdaGetter 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 Wrapper gt(T value, Predicate 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 Wrapper gt(T value, Predicate isEffective) { + addWhereQueryCondition(queryColumn.gt(value, isEffective)); + return queryWrapper; + } + + /** + * 大于 {@code >} + */ public Wrapper gt(LambdaGetter value) { - return gt(LambdaUtil.getQueryColumn(value)); + return gt(LambdaUtil.getQueryColumn(value), true); } /** - * @deprecated {@link Predicate} 泛型参数无效 + * 大于 {@code >} */ - @Deprecated - public Wrapper gt(LambdaGetter value, Predicate when) { - if (value != null) { - queryWrapper.addWhereQueryCondition(queryColumn.gt(value).when(when), connector); - } - return queryWrapper; + public Wrapper gt(LambdaGetter value, boolean isEffective) { + return gt(LambdaUtil.getQueryColumn(value), isEffective); } - /** - * 大于等于 greater or equal - * - * @param value + * 大于 {@code >} */ + public Wrapper gt(LambdaGetter 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 Wrapper ge(T value, Predicate 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 Wrapper ge(T value, Predicate isEffective) { + addWhereQueryCondition(queryColumn.ge(value, isEffective)); + return queryWrapper; + } + + /** + * 大于等于 {@code >=} + */ public Wrapper ge(LambdaGetter value) { - return ge(LambdaUtil.getQueryColumn(value)); + return eq(LambdaUtil.getQueryColumn(value), true); } /** - * @deprecated {@link Predicate} 泛型参数无效 + * 大于等于 {@code >=} */ - @Deprecated - public Wrapper ge(LambdaGetter value, Predicate when) { - if (value != null) { - queryWrapper.addWhereQueryCondition(queryColumn.ge(value).when(when), connector); - } - return queryWrapper; + public Wrapper ge(LambdaGetter value, boolean isEffective) { + return eq(LambdaUtil.getQueryColumn(value), isEffective); } /** - * 小于 less than - * - * @param value + * 大于等于 {@code >=} */ + public Wrapper ge(LambdaGetter 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 Wrapper lt(T value, Predicate 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 Wrapper lt(T value, Predicate isEffective) { + addWhereQueryCondition(queryColumn.lt(value, isEffective)); + return queryWrapper; + } + + /** + * 小于 {@code <} + */ public Wrapper lt(LambdaGetter value) { - return lt(LambdaUtil.getQueryColumn(value)); + return lt(LambdaUtil.getQueryColumn(value), true); } /** - * @deprecated {@link Predicate} 泛型参数无效 + * 小于 {@code <} */ - @Deprecated - public Wrapper lt(LambdaGetter value, Predicate when) { - if (value != null) { - queryWrapper.addWhereQueryCondition(queryColumn.lt(value).when(when), connector); - } - return queryWrapper; + public Wrapper lt(LambdaGetter value, boolean isEffective) { + return lt(LambdaUtil.getQueryColumn(value), isEffective); } /** - * 小于等于 less or equal - * - * @param value + * 小于 {@code <} */ + public Wrapper lt(LambdaGetter 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 Wrapper le(T value, Predicate 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 Wrapper le(T value, Predicate isEffective) { + addWhereQueryCondition(queryColumn.le(value, isEffective)); + return queryWrapper; + } + + /** + * 小于等于 {@code <=} + */ public Wrapper le(LambdaGetter value) { - return le(LambdaUtil.getQueryColumn(value)); + return le(LambdaUtil.getQueryColumn(value), true); } /** - * @deprecated {@link Predicate} 泛型参数无效 + * 小于等于 {@code <=} */ - @Deprecated - public Wrapper le(LambdaGetter value, Predicate 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 Wrapper le(LambdaGetter value, boolean isEffective) { + return le(LambdaUtil.getQueryColumn(value), isEffective); } /** - * @deprecated 无法推断泛型 + * 小于等于 {@code <=} */ - @Deprecated - public Wrapper isNull(Predicate when) { - queryWrapper.addWhereQueryCondition(queryColumn.isNull(when), connector); + public Wrapper le(LambdaGetter 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 Wrapper isNotNull(Predicate 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 Wrapper in(T[] value, Predicate isEffective) { + addWhereQueryCondition(queryColumn.in(value, isEffective)); return queryWrapper; } - public Wrapper in(T[] arrays, Predicate 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 > Wrapper in(T value, Predicate 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 Wrapper in(QueryWrapper queryWrapper, Predicate 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 > Wrapper in(T collection, Predicate 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 Wrapper notIn(T[] arrays, Predicate when) { - if (queryWrapper != null) { - queryWrapper.addWhereQueryCondition(queryColumn.notIn(arrays, when), connector); - } + @Override + public Wrapper notIn(T[] value, Predicate 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 > Wrapper notIn(T collection, Predicate 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 > Wrapper notIn(T value, Predicate 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 Wrapper notIn(QueryWrapper queryWrapper, Predicate 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 Wrapper between(S start, E end, BiPredicate 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 Wrapper between(S start, E end, BiPredicate 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 Wrapper notBetween(S start, E end, BiPredicate 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 Wrapper notBetween(S start, E end, BiPredicate 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 Wrapper like(T value, Predicate 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 Wrapper likeLeft(T value, Predicate 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 Wrapper likeRight(T value, Predicate 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 Wrapper notLike(T value, Predicate 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 Wrapper notLikeLeft(T value, Predicate 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 Wrapper notLikeRight(T value, Predicate 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; + } } From a817910084d553300cb2da106ac1ec63879b66fa Mon Sep 17 00:00:00 2001 From: Suomm <1474983351@qq.com> Date: Wed, 16 Aug 2023 17:20:01 +0800 Subject: [PATCH 07/12] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=9B=B4?= =?UTF-8?q?=E5=A4=9A=20Lambda=20=E5=8A=A8=E6=80=81=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E9=87=8D=E8=BD=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/activerecord/query/WhereBuilder.java | 738 ++++++++++++------ 1 file changed, 515 insertions(+), 223 deletions(-) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/activerecord/query/WhereBuilder.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/activerecord/query/WhereBuilder.java index d8b1e30e..6ad3abcb 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/activerecord/query/WhereBuilder.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/activerecord/query/WhereBuilder.java @@ -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> { +public class WhereBuilder> implements Conditional { private final R queryModel; private final QueryColumn queryColumn; @@ -43,368 +42,661 @@ public class WhereBuilder> { 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 R eq(T value, Predicate 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 R eq(T value, Predicate isEffective) { + addWhereQueryCondition(queryColumn.eq(value, isEffective)); + return queryModel; + } + + /** + * 等于 {@code =} + */ public R eq(LambdaGetter value) { - return eq(LambdaUtil.getQueryColumn(value)); + return eq(LambdaUtil.getQueryColumn(value), true); } /** - * @deprecated {@link Predicate} 泛型参数无效 + * 等于 {@code =} */ - @Deprecated - public R eq(LambdaGetter value, Predicate when) { - if (value != null) { - CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.eq(LambdaUtil.getQueryColumn(value)).when(when), connector); - } - return queryModel; + public R eq(LambdaGetter value, boolean isEffective) { + return eq(LambdaUtil.getQueryColumn(value), isEffective); } + /** + * 等于 {@code =} + */ + public R eq(LambdaGetter 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 R ne(T value, Predicate 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 R ne(T value, Predicate isEffective) { + addWhereQueryCondition(queryColumn.ne(value, isEffective)); + return queryModel; + } + + /** + * 不等于 {@code !=} + */ public R ne(LambdaGetter value) { - return ne(LambdaUtil.getQueryColumn(value)); + return ne(LambdaUtil.getQueryColumn(value), true); } /** - * @deprecated {@link Predicate} 泛型参数无效 + * 不等于 {@code !=} */ - @Deprecated - public R ne(LambdaGetter value, Predicate when) { - if (value != null) { - CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.ne(LambdaUtil.getQueryColumn(value)).when(when), connector); - } - return queryModel; + public R ne(LambdaGetter 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 R like(T value, Predicate 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 R likeLeft(T value, Predicate 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 R likeRight(T value, Predicate when) { - if (value != null) { - CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.likeRight(value, when), connector); - } - return queryModel; + /** + * 不等于 {@code !=} + */ + public R ne(LambdaGetter 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 R gt(T value, Predicate 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 R gt(T value, Predicate isEffective) { + addWhereQueryCondition(queryColumn.gt(value, isEffective)); + return queryModel; + } + + /** + * 大于 {@code >} + */ public R gt(LambdaGetter value) { - return gt(LambdaUtil.getQueryColumn(value)); + return gt(LambdaUtil.getQueryColumn(value), true); } /** - * @deprecated {@link Predicate} 泛型参数无效 + * 大于 {@code >} */ - @Deprecated - public R gt(LambdaGetter value, Predicate when) { - if (value != null) { - CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.gt(LambdaUtil.getQueryColumn(value)).when(when), connector); - } - return queryModel; + public R gt(LambdaGetter value, boolean isEffective) { + return gt(LambdaUtil.getQueryColumn(value), isEffective); } + /** + * 大于 {@code >} + */ + public R gt(LambdaGetter 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 R ge(T value, Predicate 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 R ge(T value, Predicate isEffective) { + addWhereQueryCondition(queryColumn.ge(value, isEffective)); + return queryModel; + } + + /** + * 大于等于 {@code >=} + */ public R ge(LambdaGetter value) { - return ge(LambdaUtil.getQueryColumn(value)); + return eq(LambdaUtil.getQueryColumn(value), true); } /** - * @deprecated {@link Predicate} 泛型参数无效 + * 大于等于 {@code >=} */ - @Deprecated - public R ge(LambdaGetter value, Predicate when) { - if (value != null) { - CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.ge(LambdaUtil.getQueryColumn(value)).when(when), connector); - } - return queryModel; + public R ge(LambdaGetter value, boolean isEffective) { + return eq(LambdaUtil.getQueryColumn(value), isEffective); } + /** + * 大于等于 {@code >=} + */ + public R ge(LambdaGetter 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 R lt(T value, Predicate 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 R lt(T value, Predicate isEffective) { + addWhereQueryCondition(queryColumn.lt(value, isEffective)); + return queryModel; + } + + /** + * 小于 {@code <} + */ public R lt(LambdaGetter value) { - return lt(LambdaUtil.getQueryColumn(value)); + return lt(LambdaUtil.getQueryColumn(value), true); } /** - * @deprecated {@link Predicate} 泛型参数无效 + * 小于 {@code <} */ - @Deprecated - public R lt(LambdaGetter value, Predicate when) { - if (value != null) { - CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.lt(LambdaUtil.getQueryColumn(value)).when(when), connector); - } - return queryModel; + public R lt(LambdaGetter value, boolean isEffective) { + return lt(LambdaUtil.getQueryColumn(value), isEffective); } + /** + * 小于 {@code <} + */ + public R lt(LambdaGetter 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 R le(T value, Predicate 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 R le(T value, Predicate isEffective) { + addWhereQueryCondition(queryColumn.le(value, isEffective)); + return queryModel; + } + + /** + * 小于等于 {@code <=} + */ public R le(LambdaGetter value) { - return le(LambdaUtil.getQueryColumn(value)); + return le(LambdaUtil.getQueryColumn(value), true); } /** - * @deprecated {@link Predicate} 泛型参数无效 + * 小于等于 {@code <=} */ - @Deprecated - public R le(LambdaGetter value, Predicate when) { - if (value != null) { - CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.le(LambdaUtil.getQueryColumn(value)).when(when), connector); - } + public R le(LambdaGetter value, boolean isEffective) { + return le(LambdaUtil.getQueryColumn(value), isEffective); + } + + /** + * 小于等于 {@code <=} + */ + public R le(LambdaGetter 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 R in(T[] value, Predicate 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 > R in(T value, Predicate 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 R isNull(Predicate 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 queryModel) { + return in(queryModel, true); } /** - * @deprecated 无法推断泛型 + * {@code IN(value)} */ - @Deprecated - public R isNotNull(Predicate 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 R in(T[] arrays, Predicate 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 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 R in(R queryModel, Predicate when) { - if (queryModel != null) { - CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.in(queryModel, when), connector); - } - return this.queryModel; + public R in(QueryModel 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 > R in(T collection, Predicate 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 R notIn(T[] arrays, Predicate when) { - if (queryModel != null) { - CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.notIn(arrays, when), connector); - } + @Override + public R notIn(T[] value, Predicate 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 > R notIn(T collection, Predicate 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 > R notIn(T value, Predicate 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 queryModel) { + return notIn(queryModel, true); + } + + /** + * {@code NOT IN(value)} + */ + public R notIn(QueryModel 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 R notIn(R queryModel, Predicate when) { - if (queryModel != null) { - CPI.addWhereQueryCondition(queryModel.queryWrapper(), queryColumn.notIn(queryModel, when), connector); - } - return this.queryModel; + public R notIn(QueryModel 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 R between(S start, E end, BiPredicate 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 R between(S start, E end, BiPredicate 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 R notBetween(S start, E end, BiPredicate 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 R notBetween(S start, E end, BiPredicate 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 R like(T value, Predicate 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 R likeLeft(T value, Predicate 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 R likeRight(T value, Predicate 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 R notLike(T value, Predicate 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 R notLikeLeft(T value, Predicate 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 R notLikeRight(T value, Predicate 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; } From 3e034e6b133d36ab52e3274fe1c59f83f87b362b Mon Sep 17 00:00:00 2001 From: Suomm <1474983351@qq.com> Date: Wed, 16 Aug 2023 17:20:18 +0800 Subject: [PATCH 08/12] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=B1=9E?= =?UTF-8?q?=E6=80=A7=E8=AE=BE=E7=BD=AE=E6=8E=A5=E5=8F=A3=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/update/PropertySetter.java | 280 ++++++++++++++++++ 1 file changed, 280 insertions(+) create mode 100644 mybatis-flex-core/src/main/java/com/mybatisflex/core/update/PropertySetter.java diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/update/PropertySetter.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/update/PropertySetter.java new file mode 100644 index 00000000..e62d2c41 --- /dev/null +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/update/PropertySetter.java @@ -0,0 +1,280 @@ +/* + * Copyright (c) 2022-2023, Mybatis-Flex (fuhai999@gmail.com). + *

+ * 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 + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * 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 链式调用返回值类型 + * @author 王帅 + * @since 2023-08-16 + */ +public interface PropertySetter { + + /** + * 设置字段对应参数值。 + * + * @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 R set(String property, V value, Predicate 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 R set(QueryColumn property, V value, Predicate isEffective) { + return set(property, value, isEffective.test(value)); + } + + /** + * 设置字段对应参数值。 + * + * @param property 字段名 + * @param value 参数值 + */ + default R set(LambdaGetter property, Object value) { + return set(property, value, true); + } + + /** + * 设置字段对应参数值。 + * + * @param property 字段名 + * @param value 参数值 + * @param isEffective 是否生效 + */ + R set(LambdaGetter property, Object value, boolean isEffective); + + /** + * 设置字段对应参数值。 + * + * @param property 字段名 + * @param value 参数值 + * @param isEffective 是否生效 + */ + default R set(LambdaGetter property, Object value, BooleanSupplier isEffective) { + return set(property, value, isEffective.getAsBoolean()); + } + + /** + * 设置字段对应参数值。 + * + * @param property 字段名 + * @param value 参数值 + * @param isEffective 是否生效 + */ + default R set(LambdaGetter property, V value, Predicate 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 R setRaw(String property, V value, Predicate 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 R setRaw(QueryColumn property, V value, Predicate isEffective) { + return setRaw(property, value, isEffective.test(value)); + } + + /** + * 设置字段对应原生值。 + * + * @param property 字段名 + * @param value 原生值 + */ + default R setRaw(LambdaGetter property, Object value) { + return setRaw(property, value, true); + } + + /** + * 设置字段对应原生值。 + * + * @param property 字段名 + * @param value 原生值 + * @param isEffective 是否生效 + */ + R setRaw(LambdaGetter property, Object value, boolean isEffective); + + /** + * 设置字段对应原生值。 + * + * @param property 字段名 + * @param value 原生值 + * @param isEffective 是否生效 + */ + default R setRaw(LambdaGetter property, Object value, BooleanSupplier isEffective) { + return setRaw(property, value, isEffective.getAsBoolean()); + } + + /** + * 设置字段对应原生值。 + * + * @param property 字段名 + * @param value 原生值 + * @param isEffective 是否生效 + */ + default R setRaw(LambdaGetter property, V value, Predicate isEffective) { + return setRaw(property, value, isEffective.test(value)); + } + +} From 4e0fad7e1727ba2a938376186314b30b0166070a Mon Sep 17 00:00:00 2001 From: Suomm <1474983351@qq.com> Date: Wed, 16 Aug 2023 17:20:53 +0800 Subject: [PATCH 09/12] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=9B=B4?= =?UTF-8?q?=E5=A4=9A=E6=9D=A1=E4=BB=B6=E8=AE=BE=E7=BD=AE=E9=87=8D=E8=BD=BD?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/update/UpdateWrapper.java | 110 +++++++----------- 1 file changed, 43 insertions(+), 67 deletions(-) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/update/UpdateWrapper.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/update/UpdateWrapper.java index 5ce9d749..3a0acec0 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/update/UpdateWrapper.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/update/UpdateWrapper.java @@ -29,103 +29,79 @@ import java.util.Map; /** * @author michael */ -public interface UpdateWrapper extends Serializable { +public interface UpdateWrapper extends PropertySetter, Serializable { default Map 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 UpdateWrapper set(LambdaGetter getter, Object value, boolean condition) { - if (condition) { - return set(getter, value); + @Override + default UpdateWrapper set(LambdaGetter 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 UpdateWrapper set(LambdaGetter 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 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 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 UpdateWrapper setRaw(LambdaGetter 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 UpdateWrapper setRaw(LambdaGetter getter, Object value, boolean condition) { - if (condition) { - return setRaw(getter, value); - } - return this; - } - - - default UpdateWrapper setRaw(LambdaGetter getter, Object value) { - getUpdates().put(LambdaUtil.getFieldName(getter), new RawValue(value)); - return this; - } - - - default UpdateWrapper setRaw(QueryColumn queryColumn, Object value, boolean condition) { - if (condition) { - return setRaw(queryColumn, value); - } - return this; - } - - default 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; From 2f6b12af0f658b075087deaa90cb8d0c44ba7336 Mon Sep 17 00:00:00 2001 From: Suomm <1474983351@qq.com> Date: Wed, 16 Aug 2023 17:22:58 +0800 Subject: [PATCH 10/12] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=9B=B4?= =?UTF-8?q?=E5=A4=9A=E5=B1=9E=E6=80=A7=E8=AE=BE=E7=BD=AE=E9=87=8D=E8=BD=BD?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mybatisflex/core/row/Row.java | 156 ++++++++++++++++++ 1 file changed, 156 insertions(+) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/Row.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/Row.java index 09840852..b10e2fd9 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/Row.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/Row.java @@ -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 implements UpdateWrapper { @@ -93,8 +95,73 @@ public class Row extends LinkedHashMap 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 Row set(LambdaGetter 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 Row setRaw(LambdaGetter 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 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 Row set(String property, V value, Predicate 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 Row set(QueryColumn property, V value, Predicate isEffective) { + return set(property, value, isEffective.test(value)); + } + + @Override + public Row set(LambdaGetter property, Object value) { + return set(property, value, true); + } + + @Override + public Row set(LambdaGetter property, Object value, BooleanSupplier isEffective) { + return set(property, value, isEffective.getAsBoolean()); + } + + @Override + public Row set(LambdaGetter property, V value, Predicate 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 Row setRaw(String property, V value, Predicate 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 Row setRaw(QueryColumn property, V value, Predicate isEffective) { + return setRaw(property, value, isEffective.test(value)); + } + + @Override + public Row setRaw(LambdaGetter property, Object value) { + return setRaw(property, value, true); + } + + @Override + public Row setRaw(LambdaGetter property, Object value, BooleanSupplier isEffective) { + return setRaw(property, value, isEffective.getAsBoolean()); + } + + @Override + public Row setRaw(LambdaGetter property, V value, Predicate isEffective) { + return setRaw(property, value, isEffective.test(value)); + } public Object get(String key, Object defaultValue) { Object result = super.get(key); From 307d52db0af0f7f4f8be147c51e8663c16ded97a Mon Sep 17 00:00:00 2001 From: Suomm <1474983351@qq.com> Date: Wed, 16 Aug 2023 17:23:26 +0800 Subject: [PATCH 11/12] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E9=93=BE?= =?UTF-8?q?=E5=BC=8F=E5=B1=9E=E6=80=A7=E8=AE=BE=E7=BD=AE=EF=BC=8C=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=9B=B4=E5=A4=9A=E9=87=8D=E8=BD=BD=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mybatisflex/core/row/DbChain.java | 36 +++++++++++++++---- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/DbChain.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/DbChain.java index 248b8df4..a65d5528 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/DbChain.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/DbChain.java @@ -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 { +public class DbChain extends QueryWrapperAdapter implements PropertySetter { private String schema; private String tableName; @@ -108,18 +109,39 @@ public class DbChain extends QueryWrapperAdapter { 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 DbChain set(LambdaGetter column, Object value) { - getRow().set(column, value); + @Override + public DbChain set(LambdaGetter 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 DbChain setRaw(LambdaGetter property, Object value, boolean isEffective) { + getRow().set(property, value, isEffective); return this; } From d1ee8c50c9e99bacde7066ec28a0545a417066fc Mon Sep 17 00:00:00 2001 From: Suomm <1474983351@qq.com> Date: Wed, 16 Aug 2023 19:34:02 +0800 Subject: [PATCH 12/12] =?UTF-8?q?feat:=20=E9=93=BE=E5=BC=8F=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E6=B7=BB=E5=8A=A0=E6=9B=B4=E5=A4=9A=E9=87=8D=E8=BD=BD?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybatisflex/core/update/UpdateChain.java | 62 ++++++------------- 1 file changed, 19 insertions(+), 43 deletions(-) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/update/UpdateChain.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/update/UpdateChain.java index 99dc62e6..25beb88f 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/update/UpdateChain.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/update/UpdateChain.java @@ -37,7 +37,7 @@ import java.lang.reflect.Type; * @since 2023-07-25 */ @SuppressWarnings("unchecked") -public class UpdateChain extends QueryWrapperAdapter> { +public class UpdateChain extends QueryWrapperAdapter> implements PropertySetter> { private final BaseMapper baseMapper; private final T entity; @@ -82,64 +82,40 @@ public class UpdateChain extends QueryWrapperAdapter> { return new UpdateChain<>(baseMapper); } - public UpdateChain set(String property, Object value, boolean condition) { - entityWrapper.set(property, value, condition); + @Override + public UpdateChain set(String property, Object value, boolean isEffective) { + entityWrapper.set(property, value, isEffective); return this; } - public UpdateChain set(String property, Object value) { - entityWrapper.set(property, value); + @Override + public UpdateChain set(QueryColumn queryColumn, Object value, boolean isEffective) { + entityWrapper.set(queryColumn, value, isEffective); return this; } - public UpdateChain set(LambdaGetter getter, Object value, boolean condition) { - entityWrapper.set(getter, value, condition); - return this; - } - - public UpdateChain set(LambdaGetter getter, Object value) { - entityWrapper.set(getter, value); - return this; - } - - public UpdateChain set(QueryColumn queryColumn, Object value, boolean condition) { - entityWrapper.set(queryColumn, value, condition); + @Override + public UpdateChain set(LambdaGetter getter, Object value, boolean isEffective) { + entityWrapper.set(getter, value, isEffective); return this; } - public UpdateChain set(QueryColumn queryColumn, Object value) { - entityWrapper.set(queryColumn, value); + @Override + public UpdateChain setRaw(String property, Object value, boolean isEffective) { + entityWrapper.setRaw(property, value, isEffective); return this; } - public UpdateChain setRaw(String property, Object value, boolean condition) { - entityWrapper.setRaw(property, value, condition); + @Override + public UpdateChain setRaw(QueryColumn queryColumn, Object value, boolean isEffective) { + entityWrapper.setRaw(queryColumn, value, isEffective); return this; } - public UpdateChain setRaw(String property, Object value) { - entityWrapper.setRaw(property, value); - return this; - } - - public UpdateChain setRaw(LambdaGetter getter, Object value, boolean condition) { - entityWrapper.setRaw(getter, value, condition); - return this; - } - - public UpdateChain setRaw(LambdaGetter getter, Object value) { - entityWrapper.setRaw(getter, value); - return this; - } - - public UpdateChain setRaw(QueryColumn queryColumn, Object value, boolean condition) { - entityWrapper.setRaw(queryColumn, value, condition); - return this; - } - - public UpdateChain setRaw(QueryColumn queryColumn, Object value) { - entityWrapper.set(queryColumn, value); + @Override + public UpdateChain setRaw(LambdaGetter getter, Object value, boolean isEffective) { + entityWrapper.setRaw(getter, value, isEffective); return this; }