LogicalExpression.java 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package com.uas.ps.inquiry.page.criteria;
  2. import javax.persistence.criteria.CriteriaBuilder;
  3. import javax.persistence.criteria.CriteriaQuery;
  4. import javax.persistence.criteria.Predicate;
  5. import javax.persistence.criteria.Root;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. /**
  9. * 逻辑条件表达式 用于复杂条件时使用
  10. *
  11. * @author yingp
  12. *
  13. */
  14. public class LogicalExpression implements CriterionExpression {
  15. /**
  16. * 逻辑表达式中包含的表达式
  17. */
  18. private CriterionExpression[] expressions;
  19. /**
  20. * 运算符
  21. */
  22. private Operator operator;
  23. public LogicalExpression(CriterionExpression[] expressions, Operator operator) {
  24. this.expressions = expressions;
  25. this.operator = operator;
  26. }
  27. public Predicate toPredicate(Root<?> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
  28. List<Predicate> predicates = new ArrayList<Predicate>();
  29. for (int i = 0, len = this.expressions.length; i < len; i++) {
  30. predicates.add(this.expressions[i].toPredicate(root, query, builder));
  31. }
  32. switch (operator) {
  33. case OR:
  34. return builder.or(predicates.toArray(new Predicate[predicates.size()]));
  35. case AND:
  36. return builder.and(predicates.toArray(new Predicate[predicates.size()]));
  37. default:
  38. return null;
  39. }
  40. }
  41. }