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 new file mode 100644 index 00000000..d9693c5b --- /dev/null +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/activerecord/query/WhereBuilder.java @@ -0,0 +1,351 @@ +/* + * 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.activerecord.query; + +import com.mybatisflex.core.query.CPI; +import com.mybatisflex.core.query.QueryColumn; +import com.mybatisflex.core.query.SqlConnector; +import com.mybatisflex.core.util.LambdaGetter; +import com.mybatisflex.core.util.LambdaUtil; + +import java.util.Collection; +import java.util.function.Predicate; + +/** + * @param + * @author 王帅 + * @since 2023-07-24 + */ +public class WhereBuilder> { + + private final R queryModel; + private final QueryColumn queryColumn; + private final SqlConnector connector; + + public WhereBuilder(R queryModel, QueryColumn queryColumn, SqlConnector connector) { + this.queryModel = queryModel; + this.queryColumn = queryColumn; + this.connector = connector; + } + + public R eq(Object value) { + if (value != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.eq(value), connector); + } + return queryModel; + } + + public R eq(Object value, Predicate when) { + if (value != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.eq(value, when), connector); + } + return queryModel; + } + + public R eq(LambdaGetter value) { + return eq(LambdaUtil.getQueryColumn(value)); + } + + public R eq(LambdaGetter value, Predicate when) { + return eq(LambdaUtil.getQueryColumn(value), when); + } + + public R ne(Object value) { + if (value != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.ne(value), connector); + } + return queryModel; + } + + public R ne(Object value, Predicate when) { + if (value != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.ne(value, when), connector); + } + return queryModel; + } + + public R ne(LambdaGetter value) { + return ne(LambdaUtil.getQueryColumn(value)); + } + + public R ne(LambdaGetter value, Predicate when) { + return ne(LambdaUtil.getQueryColumn(value), when); + } + + public R like(Object value) { + if (value != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.like(value), connector); + } + return queryModel; + } + + public R like(Object value, Predicate when) { + if (value != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.like(value, when), connector); + } + return queryModel; + } + + public R likeLeft(Object value) { + if (value != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.likeLeft(value), connector); + } + return queryModel; + } + + public R likeLeft(Object value, Predicate when) { + if (value != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.likeLeft(value, when), connector); + } + return queryModel; + } + + public R likeRight(Object value) { + if (value != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.likeRight(value), connector); + } + return queryModel; + } + + public R likeRight(Object value, Predicate when) { + if (value != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.likeRight(value, when), connector); + } + return queryModel; + } + + public R gt(Object value) { + if (value != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.gt(value), connector); + } + return queryModel; + } + + public R gt(Object value, Predicate when) { + if (value != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.gt(value, when), connector); + } + return queryModel; + } + + public R gt(LambdaGetter value) { + return gt(LambdaUtil.getQueryColumn(value)); + } + + public R gt(LambdaGetter value, Predicate when) { + return gt(LambdaUtil.getQueryColumn(value), when); + } + + public R ge(Object value) { + if (value != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.ge(value), connector); + } + return queryModel; + } + + public R ge(Object value, Predicate when) { + if (value != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.ge(value, when), connector); + } + return queryModel; + } + + public R ge(LambdaGetter value) { + return ge(LambdaUtil.getQueryColumn(value)); + } + + public R ge(LambdaGetter value, Predicate when) { + return ge(LambdaUtil.getQueryColumn(value), when); + } + + public R lt(Object value) { + if (value != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.lt(value), connector); + } + return queryModel; + } + + public R lt(Object value, Predicate when) { + if (value != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.lt(value, when), connector); + } + return queryModel; + } + + public R lt(LambdaGetter value) { + return lt(LambdaUtil.getQueryColumn(value)); + } + + public R lt(LambdaGetter value, Predicate when) { + return lt(LambdaUtil.getQueryColumn(value), when); + } + + public R le(Object value) { + if (value != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.le(value), connector); + } + return queryModel; + } + + public R le(Object value, Predicate when) { + if (value != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.le(value, when), connector); + } + return queryModel; + } + + public R le(LambdaGetter value) { + return le(LambdaUtil.getQueryColumn(value)); + } + + public R le(LambdaGetter value, Predicate when) { + return le(LambdaUtil.getQueryColumn(value), when); + } + + public R isNull() { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.isNull(), connector); + return queryModel; + } + + public R isNull(Predicate when) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.isNull(when), connector); + return queryModel; + } + + public R isNotNull() { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.isNotNull(), connector); + return queryModel; + } + + public R isNotNull(Predicate when) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.isNotNull(when), connector); + return queryModel; + } + + public R in(Object... arrays) { + if (arrays != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.in(arrays), connector); + } + return queryModel; + } + + public R in(Object[] arrays, Predicate when) { + //忽略 QueryWrapper.in("name", null) 的情况 + if (arrays != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.in(arrays, when), connector); + } + return queryModel; + } + + public R in(R queryModel) { + if (queryModel != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.in(queryModel), connector); + } + return this.queryModel; + } + + public R in(R queryModel, Predicate when) { + if (queryModel != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.in(queryModel, when), connector); + } + return this.queryModel; + } + + public R in(Collection collection) { + if (queryModel != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.in(collection), connector); + } + return queryModel; + } + + public R in(Collection collection, Predicate when) { + if (queryModel != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.in(collection, when), connector); + } + return queryModel; + } + + public R notIn(Object... arrays) { + if (queryModel != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.notIn(arrays), connector); + } + return queryModel; + } + + public R notIn(Object[] arrays, Predicate when) { + if (queryModel != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.notIn(arrays, when), connector); + } + return queryModel; + } + + public R notIn(Collection collection) { + if (queryModel != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.notIn(collection), connector); + } + return queryModel; + } + + public R notIn(Collection collection, Predicate when) { + if (queryModel != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.notIn(collection, when), connector); + } + return queryModel; + } + + public R notIn(R queryModel) { + if (queryModel != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.notIn(queryModel), connector); + } + return this.queryModel; + } + + public R notIn(R queryModel, Predicate when) { + if (queryModel != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.notIn(queryModel, when), connector); + } + return this.queryModel; + } + + public R between(Object start, Object end) { + if (queryModel != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.between(start, end), connector); + } + return queryModel; + } + + public R between(Object start, Object end, Predicate when) { + if (queryModel != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.between(start, end, when), connector); + } + return queryModel; + } + + public R notBetween(Object start, Object end) { + if (queryModel != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.notBetween(start, end), connector); + } + return queryModel; + } + + public R notBetween(Object start, Object end, Predicate when) { + if (queryModel != null) { + CPI.addWhereQueryCondition(queryModel.getQueryWrapper(), queryColumn.notBetween(start, end, when), connector); + } + return queryModel; + } + +}