
com.github.wenhao.jpa.PredicateBuilder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jpa-spec Show documentation
Show all versions of jpa-spec Show documentation
A JAP Query By Specification framework.
The newest version!
package com.github.wenhao.jpa;
import com.github.wenhao.jpa.specification.BetweenSpecification;
import com.github.wenhao.jpa.specification.EqualSpecification;
import com.github.wenhao.jpa.specification.GeSpecification;
import com.github.wenhao.jpa.specification.GtSpecification;
import com.github.wenhao.jpa.specification.InSpecification;
import com.github.wenhao.jpa.specification.LeSpecification;
import com.github.wenhao.jpa.specification.LikeSpecification;
import com.github.wenhao.jpa.specification.LtSpecification;
import com.github.wenhao.jpa.specification.NotEqualSpecification;
import com.github.wenhao.jpa.specification.NotInSpecification;
import com.github.wenhao.jpa.specification.NotLikeSpecification;
import org.springframework.data.jpa.domain.Specification;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import static javax.persistence.criteria.Predicate.BooleanOperator.OR;
public class PredicateBuilder {
private final Predicate.BooleanOperator operator;
private List> specifications;
public PredicateBuilder(Predicate.BooleanOperator operator) {
this.operator = operator;
this.specifications = new ArrayList<>();
}
public PredicateBuilder eq(String property, Object... values) {
return eq(true, property, values);
}
public PredicateBuilder eq(boolean condition, String property, Object... values) {
return this.predicate(condition, new EqualSpecification(property, values));
}
public PredicateBuilder ne(String property, Object... values) {
return ne(true, property, values);
}
public PredicateBuilder ne(boolean condition, String property, Object... values) {
return this.predicate(condition, new NotEqualSpecification(property, values));
}
public PredicateBuilder gt(String property, Comparable> compare) {
return gt(true, property, compare);
}
public PredicateBuilder gt(boolean condition, String property, Comparable> compare) {
return this.predicate(condition, new GtSpecification(property, compare));
}
public PredicateBuilder ge(String property, Comparable> compare) {
return ge(true, property, compare);
}
public PredicateBuilder ge(boolean condition, String property, Comparable extends Object> compare) {
return this.predicate(condition, new GeSpecification(property, compare));
}
public PredicateBuilder lt(String property, Comparable> number) {
return lt(true, property, number);
}
public PredicateBuilder lt(boolean condition, String property, Comparable> compare) {
return this.predicate(condition, new LtSpecification(property, compare));
}
public PredicateBuilder le(String property, Comparable> compare) {
return le(true, property, compare);
}
public PredicateBuilder le(boolean condition, String property, Comparable> compare) {
return this.predicate(condition, new LeSpecification(property, compare));
}
public PredicateBuilder between(String property, Object lower, Object upper) {
return between(true, property, lower, upper);
}
public PredicateBuilder between(boolean condition, String property, Object lower, Object upper) {
return this.predicate(condition, new BetweenSpecification(property, lower, upper));
}
public PredicateBuilder like(String property, String... patterns) {
return like(true, property, patterns);
}
public PredicateBuilder like(boolean condition, String property, String... patterns) {
return this.predicate(condition, new LikeSpecification(property, patterns));
}
public PredicateBuilder notLike(String property, String... patterns) {
return notLike(true, property, patterns);
}
public PredicateBuilder notLike(boolean condition, String property, String... patterns) {
return this.predicate(condition, new NotLikeSpecification(property, patterns));
}
public PredicateBuilder in(String property, Object... values) {
return this.in(true, property, values);
}
public PredicateBuilder in(boolean condition, String property, Object... values) {
return this.predicate(condition, new InSpecification(property, values));
}
public PredicateBuilder notIn(String property, Object... values) {
return this.notIn(true, property, values);
}
public PredicateBuilder notIn(boolean condition, String property, Object... values) {
return this.predicate(condition, new NotInSpecification(property, values));
}
public PredicateBuilder predicate(Specification specification) {
return predicate(true, specification);
}
public PredicateBuilder predicate(boolean condition, Specification specification) {
if (condition) {
this.specifications.add(specification);
}
return this;
}
public Specification build() {
return (Root root, CriteriaQuery> query, CriteriaBuilder cb) -> {
Predicate[] predicates = new Predicate[specifications.size()];
for (int i = 0; i < specifications.size(); i++) {
predicates[i] = specifications.get(i).toPredicate(root, query, cb);
}
if (Objects.equals(predicates.length, 0)) {
return null;
}
return OR.equals(operator) ? cb.or(predicates) : cb.and(predicates);
};
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy