package com.qxueyou.scc.base.util; import java.util.Collection; import java.util.function.Function; import org.apache.commons.lang3.StringUtils; import org.springframework.util.CollectionUtils; import com.querydsl.core.types.Ops; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.core.types.dsl.Expressions; /** * jpa查询 参数为空包装builder * @author zhiyong * */ public class QueryDslOptionBuilder { private BooleanExpression predicate; public QueryDslOptionBuilder() { this.predicate = Expressions.booleanOperation(Ops.EQ, Expressions.ONE, Expressions.ONE); } public QueryDslOptionBuilder(BooleanExpression predicate) { this.predicate = predicate; } /** * 不为空 and 对象 * @param expressionFunction * @param value * @return */ public QueryDslOptionBuilder and(Function expressionFunction, T value) { if (value != null) { return new QueryDslOptionBuilder(predicate.and(expressionFunction.apply(value))); } return this; } /** * 不为空 and String类型 * @param expressionFunction * @param value * @return */ public QueryDslOptionBuilder and(Function expressionFunction, String value) { if (!StringUtils.isBlank(value)) { return new QueryDslOptionBuilder(predicate.and(expressionFunction.apply(value))); } return this; } /** * 不为空 and 集合类型 * @param expressionFunction * @param collection * @return */ public QueryDslOptionBuilder and(Function, BooleanExpression> expressionFunction, Collection collection) { if (!CollectionUtils.isEmpty(collection)) { return new QueryDslOptionBuilder(predicate.and(expressionFunction.apply(collection))); } return this; } /** * 不为空 or 所有对象 * @param expressionFunction * @param value * @return */ public QueryDslOptionBuilder or(Function expressionFunction, T value) { if (value != null) { return new QueryDslOptionBuilder(predicate.or(expressionFunction.apply(value))); } return this; } /** * 不为空 or String类型 * @param expressionFunction * @param value * @return */ public QueryDslOptionBuilder or(Function expressionFunction, String value) { if (!StringUtils.isBlank(value)) { return new QueryDslOptionBuilder(predicate.or(expressionFunction.apply(value))); } return this; } /** * 不为空 or 集合类型 * @param expressionFunction * @param collection * @return */ public QueryDslOptionBuilder or(Function, BooleanExpression> expressionFunction, Collection collection) { if (!CollectionUtils.isEmpty(collection)) { return new QueryDslOptionBuilder(predicate.or(expressionFunction.apply(collection))); } return this; } public BooleanExpression build() { return predicate; } }