All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.yuehuanghun.mybatis.milu.criteria.LambdaPredicate Maven / Gradle / Ivy

There is a newer version: 1.18.0
Show newest version
/*
 * Copyright 2020-2022 the original author or authors.
 *
 * 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
 *
 *      https://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.yuehuanghun.mybatis.milu.criteria;

import java.util.function.Consumer;

import com.yuehuanghun.mybatis.milu.annotation.LogicDelete;
import com.yuehuanghun.mybatis.milu.annotation.Mode;
import com.yuehuanghun.mybatis.milu.criteria.lambda.SerializableFunction;

/**
 * 使用实体类的getter函数式作为查询条件,如实体类属性(的get方法)有变更能通过IDE直接感知
* 有局限性,目前不能使用关联表的属性作为查询条件
* 举例:
* 当使用实体类接收查询参数:Foo foo = ...; fooMapper.findByLambdaCriteria(predicate -> predicate.apply(foo).eq(Foo:getBar));
* 当使用非实体类接口查询数:FooDTO fooDto = ...; fooMapper.findByLambdaCriteria(predicate -> predicate.eq(Foo:getBar), fooDto.getBar());
* @author yuehuanghun * * @param 实体类 */ public interface LambdaPredicate extends Condition { /** * 设置实体对象查询参数 * @param entity 实体类对象查询条件参数 * @return 当前对象 */ LambdaPredicate apply(T entity); /** * 设置默认的条件生效模式,默认为Mode.NOT_EMPTY * @param conditionMode 条件生效模式 * @return 当前对象 */ LambdaPredicate conditionMode(Mode conditionMode); /** * 与一组查询条件:AND (condition1 AND condition2 [AND conditionN]) * @param conditions 条件 * @return 当前对象 */ LambdaPredicate and(Condition... conditions); /** * 给定一个LambdaPredicate进行设置 * @param predicate 条件 * @return 当前对象 */ LambdaPredicate and(Consumer> predicate); /** * 给定一个Predicate进行设置 * @param predicate 条件 * @return 当前对象 */ LambdaPredicate andP(Consumer predicate); /** * 或一组查询:OR (condition1 AND condition2 [AND conditionN]) * @param conditions 条件 * @return 当前对象 */ LambdaPredicate or(Condition... conditions); /** * 给定一个LambdaPredicate进行设置 * @param predicate 条件 * @return 当前对象 */ LambdaPredicate or(Consumer> predicate); /** * 给定一个Predicate进行设置 * @param predicate 条件 * @return 当前对象 */ LambdaPredicate orP(Consumer predicate); /** * 或一组查询:NOT (condition1 AND condition2 [AND conditionN]) * @param conditions 条件 * @return 当前对象 */ LambdaPredicate not(Condition... conditions); /** * 给定一个LambdaPredicate进行设置 * @param predicate 条件 * @return 当前对象 */ LambdaPredicate not(Consumer> predicate); /** * 给定一个Predicate进行设置 * @param predicate 条件 * @return 当前对象 */ LambdaPredicate notP(Consumer predicate); /** * 增加一个值相等查询条件,默认当value不为空时条件生效,通过设置conditionMode变更生效方式。(为空指值为null,字符串时空串,集合/数组时为0个元素) * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate eq(SerializableFunction getterFn); /** * 增加一个值相等查询条件 * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate eq(boolean accept, SerializableFunction getterFn); /** * 增加一个值不等查询条件,默认当value不为空时条件生效,通过设置conditionMode变更生效方式。(为空指值为null,字符串时空串,集合/数组时为0个元素) * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate neq(SerializableFunction getterFn); /** * 增加一个值不等查询条件 * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate neq(boolean accept, SerializableFunction getterFn); /** * 增加一个值小于查询条件,默认当value不为空时条件生效,通过设置conditionMode变更生效方式。(为空指值为null,字符串时空串,集合/数组时为0个元素) * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate lt(SerializableFunction getterFn); /** * 增加一个值小于查询条件 * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate lt(boolean accept, SerializableFunction getterFn); /** * 增加一个值小于等于查询条件,默认当value不为空时条件生效,通过设置conditionMode变更生效方式。(为空指值为null,字符串时空串,集合/数组时为0个元素) * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate lte(SerializableFunction getterFn); /** * 增加一个值小于等于查询条件 * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate lte(boolean accept, SerializableFunction getterFn); /** * 增加一个值大于查询条件,默认当value不为空时条件生效,通过设置conditionMode变更生效方式。(为空指值为null,字符串时空串,集合/数组时为0个元素) * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate gt(SerializableFunction getterFn); /** * 增加一个值大于查询条件 * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate gt(boolean accept, SerializableFunction getterFn); /** * 增加一个值大于等于查询条件,默认当value不为空时条件生效,通过设置conditionMode变更生效方式。(为空指值为null,字符串时空串,集合/数组时为0个元素) * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate gte(SerializableFunction getterFn); /** * 增加一个值大于等于查询条件 * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate gte(boolean accept, SerializableFunction getterFn); /** * 增加一个匹配查询条件,注:该查询值不会自动加匹配符,默认当value不为空时条件生效,通过设置conditionMode变更生效方式。(为空指值为null,字符串时空串,集合/数组时为0个元素) * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate like(SerializableFunction getterFn); /** * 增加一个匹配查询条件,注:该查询值不会自动加匹配符 * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate like(boolean accept, SerializableFunction getterFn); /** * 增加一个非匹配查询条件,注:该查询值不会自动加匹配符,默认当value不为空时条件生效,通过设置conditionMode变更生效方式。(为空指值为null,字符串时空串,集合/数组时为0个元素) * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate notLike(SerializableFunction getterFn); /** * 增加一个非匹配查询条件,注:该查询值不会自动加匹配符 * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate notLike(boolean accept, SerializableFunction getterFn); /** * 增加一个包含值查询条件,在值前后增加%,column LIKE CONCAT('%', value, '%'),默认当value不为空时条件生效,通过设置conditionMode变更生效方式。(为空指值为null,字符串时空串,集合/数组时为0个元素) * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate contain(SerializableFunction getterFn); /** * 增加一个包含值查询条件,在值前后增加%,column LIKE CONCAT('%', value, '%') * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate contain(boolean accept, SerializableFunction getterFn); /** * 增加一个非包含值查询条件,在值前后增加%,column NOT LIKE CONCAT('%', value, '%'),默认当value不为空时条件生效,通过设置conditionMode变更生效方式。(为空指值为null,字符串时空串,集合/数组时为0个元素) * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate notContain(SerializableFunction getterFn); /** * 增加一个非包含值查询条件,在值前后增加%,column NOT LIKE CONCAT('%', value, '%') * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate notContain(boolean accept, SerializableFunction getterFn); /** * 增加一个左匹配查询条件,在值后面增加%,column LIKE CONCAT(value, '%'),默认当value不为空时条件生效,通过设置conditionMode变更生效方式。(为空指值为null,字符串时空串,集合/数组时为0个元素) * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate startWith(SerializableFunction getterFn); /** * 增加一个左匹配查询条件,在值后面增加%,column LIKE CONCAT(value, '%') * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate startWith(boolean accept, SerializableFunction getterFn); /** * 增加一个右匹配查询条件,在值前面增加%,column LIKE CONCAT('%', value),默认当value不为空时条件生效,通过设置conditionMode变更生效方式。(为空指值为null,字符串时空串,集合/数组时为0个元素) * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate endWith(SerializableFunction getterFn); /** * 增加一个右匹配查询条件,在值前面增加%,column LIKE CONCAT('%', value) * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate endWith(boolean accept, SerializableFunction getterFn); /** * 增加一个范围匹配查询条件, column BETWEEN startValue AND endValue
* startValue和endValue不允许为null,如果可能为null值,可使用gte、lte替代 * @param getterFn 实体类的get方法函数式 * @param startValue 开始值 * @param endValue 结束值 * @return 当前对象 */ LambdaPredicate between(SerializableFunction getterFn, Object startValue, Object endValue); /** * 增加一个范围匹配查询条件, column BETWEEN startValue AND endValue
* startValue和endValue不允许为null,如果可能为null值,可使用gte、lte替代 * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @param startValue 开始值 * @param endValue 结束值 * @return 当前对象 */ LambdaPredicate between(boolean accept, SerializableFunction getterFn, Object startValue, Object endValue); /** * 增加一个值非空查询条件 * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate isNull(SerializableFunction getterFn); /** * 增加一个值非空查询条件 * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate isNull(boolean accept, SerializableFunction getterFn); /** * 增加一个值为空查询条件 * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate notNull(SerializableFunction getterFn); /** * 增加一个值为空查询条件 * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate notNull(boolean accept, SerializableFunction getterFn); /** * 增加一个IN查询条件,column IN (value[0],value[1]...),当value != null并且非空集合时,条件生效 * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate in(SerializableFunction getterFn); /** * 增加一个IN查询条件,column IN (value[0],value[1]...) * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate in(boolean accept, SerializableFunction getterFn); /** * 增加一个NOT IN查询条件,column NOT IN (value[0],value[1]...) * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate notIn(SerializableFunction getterFn); /** * 增加一个NOT IN查询条件,column NOT IN (value[0],value[1]...) * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @return 当前对象 */ LambdaPredicate notIn(boolean accept, SerializableFunction getterFn); /** * 增加一个值相等查询条件,默认当value不为空时条件生效,通过设置conditionMode变更生效方式。(为空指值为null,字符串时空串,集合/数组时为0个元素) * @param getterFn 实体类的get方法函数式 实体类的get方法函数式 * @param value 值 * @return 当前对象 */ LambdaPredicate eq(SerializableFunction getterFn, Object value); /** * 增加一个值相等查询条件 * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @param value 值 * @return 当前对象 */ LambdaPredicate eq(boolean accept, SerializableFunction getterFn, Object value); /** * 增加一个值不等查询条件,默认当value不为空时条件生效,通过设置conditionMode变更生效方式。(为空指值为null,字符串时空串,集合/数组时为0个元素) * @param getterFn 实体类的get方法函数式 * @param value 值 * @return 当前对象 */ LambdaPredicate neq(SerializableFunction getterFn, Object value); /** * 增加一个值不等查询条件 * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @param value 值 * @return 当前对象 */ LambdaPredicate neq(boolean accept, SerializableFunction getterFn, Object value); /** * 增加一个值小于查询条件,默认当value不为空时条件生效,通过设置conditionMode变更生效方式。(为空指值为null,字符串时空串,集合/数组时为0个元素) * @param getterFn 实体类的get方法函数式 * @param value 值 * @return 当前对象 */ LambdaPredicate lt(SerializableFunction getterFn, Object value); /** * 增加一个值小于查询条件 * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @param value 值 * @return 当前对象 */ LambdaPredicate lt(boolean accept, SerializableFunction getterFn, Object value); /** * 增加一个值小于等于查询条件,默认当value不为空时条件生效,通过设置conditionMode变更生效方式。(为空指值为null,字符串时空串,集合/数组时为0个元素) * @param getterFn 实体类的get方法函数式 * @param value 值 * @return 当前对象 */ LambdaPredicate lte(SerializableFunction getterFn, Object value); /** * 增加一个值小于等于查询条件 * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @param value 值 * @return 当前对象 */ LambdaPredicate lte(boolean accept, SerializableFunction getterFn, Object value); /** * 增加一个值大于查询条件,默认当value不为空时条件生效,通过设置conditionMode变更生效方式。(为空指值为null,字符串时空串,集合/数组时为0个元素) * @param getterFn 实体类的get方法函数式 * @param value 值 * @return 当前对象 */ LambdaPredicate gt(SerializableFunction getterFn, Object value); /** * 增加一个值大于查询条件 * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @param value 值 * @return 当前对象 */ LambdaPredicate gt(boolean accept, SerializableFunction getterFn, Object value); /** * 增加一个值大于等于查询条件,默认当value不为空时条件生效,通过设置conditionMode变更生效方式。(为空指值为null,字符串时空串,集合/数组时为0个元素) * @param getterFn 实体类的get方法函数式 * @param value 值 * @return 当前对象 */ LambdaPredicate gte(SerializableFunction getterFn, Object value); /** * 增加一个值大于等于查询条件 * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @param value 值 * @return 当前对象 */ LambdaPredicate gte(boolean accept, SerializableFunction getterFn, Object value); /** * 增加一个匹配查询条件,注:该查询值不会自动加匹配符,默认当value不为空时条件生效,通过设置conditionMode变更生效方式。(为空指值为null,字符串时空串,集合/数组时为0个元素) * @param getterFn 实体类的get方法函数式 * @param value 值应包括匹配符 * @return 当前对象 */ LambdaPredicate like(SerializableFunction getterFn, Object value); /** * 增加一个匹配查询条件,注:该查询值不会自动加匹配符 * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @param value 值应包括匹配符 * @return 当前对象 */ LambdaPredicate like(boolean accept, SerializableFunction getterFn, Object value); /** * 增加一个非匹配查询条件,注:该查询值不会自动加匹配符,默认当value不为空时条件生效,通过设置conditionMode变更生效方式。(为空指值为null,字符串时空串,集合/数组时为0个元素) * @param getterFn 实体类的get方法函数式 * @param value 值应包括匹配符 * @return 当前对象 */ LambdaPredicate notLike(SerializableFunction getterFn, Object value); /** * 增加一个非匹配查询条件,注:该查询值不会自动加匹配符 * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @param value 值应包括匹配符 * @return 当前对象 */ LambdaPredicate notLike(boolean accept, SerializableFunction getterFn, Object value); /** * 增加一个包含值查询条件,在值前后增加%,column LIKE CONCAT('%', value, '%'),默认当value不为空时条件生效,通过设置conditionMode变更生效方式。(为空指值为null,字符串时空串,集合/数组时为0个元素) * @param getterFn 实体类的get方法函数式 * @param value 值 * @return 当前对象 */ LambdaPredicate contain(SerializableFunction getterFn, Object value); /** * 增加一个包含值查询条件,在值前后增加%,column LIKE CONCAT('%', value, '%') * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @param value 值 * @return 当前对象 */ LambdaPredicate contain(boolean accept, SerializableFunction getterFn, Object value); /** * 增加一个非包含值查询条件,在值前后增加%,column NOT LIKE CONCAT('%', value, '%'),默认当value不为空时条件生效,通过设置conditionMode变更生效方式。(为空指值为null,字符串时空串,集合/数组时为0个元素) * @param getterFn 实体类的get方法函数式 * @param value 值 * @return 当前对象 */ LambdaPredicate notContain(SerializableFunction getterFn, Object value); /** * 增加一个非包含值查询条件,在值前后增加%,column NOT LIKE CONCAT('%', value, '%') * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @param value 值 * @return 当前对象 */ LambdaPredicate notContain(boolean accept, SerializableFunction getterFn, Object value); /** * 增加一个左匹配查询条件,在值后面增加%,column LIKE CONCAT(value, '%'),默认当value不为空时条件生效,通过设置conditionMode变更生效方式。(为空指值为null,字符串时空串,集合/数组时为0个元素) * @param getterFn 实体类的get方法函数式 * @param value 值 * @return 当前对象 */ LambdaPredicate startWith(SerializableFunction getterFn, Object value); /** * 增加一个左匹配查询条件,在值后面增加%,column LIKE CONCAT(value, '%') * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @param value 值 * @return 当前对象 */ LambdaPredicate startWith(boolean accept, SerializableFunction getterFn, Object value); /** * 增加一个右匹配查询条件,在值前面增加%,column LIKE CONCAT('%', value),默认当value不为空时条件生效,通过设置conditionMode变更生效方式。(为空指值为null,字符串时空串,集合/数组时为0个元素) * @param getterFn 实体类的get方法函数式 * @param value 值 * @return 当前对象 */ LambdaPredicate endWith(SerializableFunction getterFn, Object value); /** * 增加一个右匹配查询条件,在值前面增加%,column LIKE CONCAT('%', value) * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @param value 值 * @return 当前对象 */ LambdaPredicate endWith(boolean accept, SerializableFunction getterFn, Object value); /** * 增加一个IN查询条件,column IN (value[0],value[1]...),当value != null并且非空集合时,条件生效 * @param getterFn 实体类的get方法函数式 * @param value 值,允许值为数组或集合,非null并且元素个数大于0时生效 * @return 当前对象 */ LambdaPredicate in(SerializableFunction getterFn, Object value); /** * 增加一个IN查询条件,column IN (value[0],value[1]...) * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @param value 值,允许值为数组或集合 * @return 当前对象 */ LambdaPredicate in(boolean accept, SerializableFunction getterFn, Object value); /** * 增加一个NOT IN查询条件,column NOT IN (value[0],value[1]...) * @param getterFn 实体类的get方法函数式 * @param value 值,允许值为数组或集合,非null并且元素个数大于0时生效 * @return 当前对象 */ LambdaPredicate notIn(SerializableFunction getterFn, Object value); /** * 增加一个NOT IN查询条件,column NOT IN (value[0],value[1]...) * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @param value 值,允许值为数组或集合 * @return 当前对象 */ LambdaPredicate notIn(boolean accept, SerializableFunction getterFn, Object value); /** * 正则匹配 * @param getterFn 实体类的get方法函数式 * @param value 值 * @return 当前对象 */ LambdaPredicate regex(SerializableFunction getterFn, Object value); /** * 正则匹配 * @param accept 当值为true时,条件生效 * @param getterFn 实体类的get方法函数式 * @param value 值 * @return 当前对象 */ LambdaPredicate regex(boolean accept, SerializableFunction getterFn, Object value); /** * 增加查询未被逻辑删除的数据的查询条件 * @see LogicDelete * @return 当前对象 */ LambdaPredicate undeleted(); /** * 增加查询已被逻辑删除的数据的查询条件 * @see LogicDelete * @return 当前对象 */ LambdaPredicate deleted(); /** * 条件集合是否为空 * @return true/false */ boolean isEmpty(); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy