Criteria.java 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package org.ccframe.commons.jpaquery;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import javax.persistence.criteria.CriteriaBuilder;
  5. import javax.persistence.criteria.CriteriaQuery;
  6. import javax.persistence.criteria.Predicate;
  7. import javax.persistence.criteria.Root;
  8. import org.springframework.data.jpa.domain.Specification;
  9. /**
  10. * 定义一个查询条件容器
  11. * @author Jim
  12. */
  13. public class Criteria<T> implements Specification<T>{
  14. /**
  15. *
  16. */
  17. private static final long serialVersionUID = 7723262888497747481L;
  18. private List<Criterion> criterionList = new ArrayList<Criterion>();
  19. public Criteria(){};
  20. public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
  21. if (!criterionList.isEmpty()) {
  22. List<Predicate> predicates = new ArrayList<Predicate>();
  23. for(Criterion c : criterionList){
  24. predicates.add(c.toPredicate(root, query,builder));
  25. }
  26. // 将所有条件用 and 联合起来
  27. if (predicates.size() > 0) {
  28. return builder.and(predicates.toArray(new Predicate[predicates.size()]));
  29. }
  30. }
  31. return builder.conjunction();
  32. }
  33. /**
  34. * 增加简单条件表达式
  35. */
  36. public Criteria<T> add(Criterion criterion){
  37. if(criterion!=null){
  38. criterionList.add(criterion);
  39. }
  40. return this;
  41. }
  42. }