QueryBuilder
Mon Jul 29 2024 09:40:30 GMT+0000 (Coordinated Universal Time)
Saved by @namnt
package com.lgcns.esg.core.util;
import com.querydsl.core.BooleanBuilder;
import com.querydsl.core.types.Ops;
import com.querydsl.core.types.dsl.BooleanExpression;
import com.querydsl.core.types.dsl.ComparableExpressionBase;
import com.querydsl.core.types.dsl.Expressions;
import com.querydsl.core.types.dsl.StringExpression;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Objects;
public class QueryBuilder {
private QueryBuilder() {
}
public static final String EQUAL = "=";
public static final String NOT_EQUAL = "!=";
public static final String LIKE = "%";
public static final String GREATER_THAN = ">";
public static final String LESS_THAN = "<";
public static final String GREATER_THAN_OR_EQUAL = ">=";
public static final String LESS_THAN_OR_EQUAL = "=<";
public static final String IN = "IN";
public static final String NOT_IN = "NOT_IN";
public static <T extends Comparable<?>> void buildSearchPredicate(BooleanBuilder condition, String operation, ComparableExpressionBase<T> field, T searchData) {
if (Objects.nonNull(searchData)) {
BooleanExpression expression = null;
switch (operation) {
case EQUAL -> expression = field.eq(searchData);
case NOT_EQUAL -> expression = field.ne(searchData);
case LIKE -> {
if (field instanceof StringExpression stringExpression) {
expression = stringExpression.containsIgnoreCase(searchData.toString());
} else {
throw new IllegalArgumentException("Field does not support 'like' operation");
}
}
case GREATER_THAN ->
expression = Expressions.booleanOperation(Ops.GT, field, Expressions.constant(searchData));
case LESS_THAN ->
expression = Expressions.booleanOperation(Ops.LT, field, Expressions.constant(searchData));
case GREATER_THAN_OR_EQUAL ->
expression = Expressions.booleanOperation(Ops.GOE, field, Expressions.constant(searchData));
case LESS_THAN_OR_EQUAL ->
expression = Expressions.booleanOperation(Ops.LOE, field, Expressions.constant(searchData));
default -> throw new IllegalArgumentException("Not support operator:" + operation);
}
if (expression != null) {
condition.and(expression);
}
}
}
public static <T extends Comparable<?>> void buildSearchPredicate(BooleanBuilder condition, String operation, ComparableExpressionBase<T> field, List<T> searchData) {
if (Objects.nonNull(searchData) && !CollectionUtils.isEmpty(searchData)) {
switch (operation) {
case IN -> condition.and(field.in(searchData));
case NOT_IN -> condition.and(field.notIn(searchData));
default -> throw new IllegalArgumentException("Not support operator:" + operation);
}
}
}
}



Comments