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 <T> QueryDslOptionBuilder and(Function<T, BooleanExpression> 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<String, BooleanExpression> expressionFunction, String value) {
|
if (!StringUtils.isBlank(value)) {
|
return new QueryDslOptionBuilder(predicate.and(expressionFunction.apply(value)));
|
}
|
return this;
|
}
|
|
/**
|
* 不为空 and 集合类型
|
* @param expressionFunction
|
* @param collection
|
* @return
|
*/
|
public <T> QueryDslOptionBuilder and(Function<Collection<T>, BooleanExpression> expressionFunction,
|
Collection<T> collection) {
|
if (!CollectionUtils.isEmpty(collection)) {
|
return new QueryDslOptionBuilder(predicate.and(expressionFunction.apply(collection)));
|
}
|
return this;
|
}
|
|
/**
|
* 不为空 or 所有对象
|
* @param expressionFunction
|
* @param value
|
* @return
|
*/
|
public <T> QueryDslOptionBuilder or(Function<T, BooleanExpression> 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<String, BooleanExpression> expressionFunction, String value) {
|
if (!StringUtils.isBlank(value)) {
|
return new QueryDslOptionBuilder(predicate.or(expressionFunction.apply(value)));
|
}
|
return this;
|
}
|
|
/**
|
* 不为空 or 集合类型
|
* @param expressionFunction
|
* @param collection
|
* @return
|
*/
|
public <T> QueryDslOptionBuilder or(Function<Collection<T>, BooleanExpression> expressionFunction, Collection<T> collection) {
|
if (!CollectionUtils.isEmpty(collection)) {
|
return new QueryDslOptionBuilder(predicate.or(expressionFunction.apply(collection)));
|
}
|
return this;
|
}
|
|
public BooleanExpression build() {
|
return predicate;
|
}
|
}
|