com.yuehuanghun.mybatis.milu.criteria.LambdaPredicate Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of mybatis-milu Show documentation
Show all versions of mybatis-milu Show documentation
A mybatis orm enhance framework.
/*
* 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