SimpleExpression.java 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package org.ccframe.commons.jpaquery;
  2. import javax.persistence.criteria.CriteriaBuilder;
  3. import javax.persistence.criteria.CriteriaQuery;
  4. import javax.persistence.criteria.Expression;
  5. import javax.persistence.criteria.Path;
  6. import javax.persistence.criteria.Predicate;
  7. import javax.persistence.criteria.Root;
  8. import org.apache.commons.lang3.StringUtils;
  9. /**
  10. * 简单条件表达式
  11. *
  12. * @author lee
  13. *
  14. */
  15. public class SimpleExpression implements Criterion {
  16. private String fieldName; // 属性名
  17. private Object value; // 对应值
  18. private Operator operator; // 计算符
  19. protected SimpleExpression(String fieldName, Object value, Operator operator) {
  20. this.fieldName = fieldName;
  21. this.value = value;
  22. this.operator = operator;
  23. }
  24. public String getFieldName() {
  25. return fieldName;
  26. }
  27. public Object getValue() {
  28. return value;
  29. }
  30. public Operator getOperator() {
  31. return operator;
  32. }
  33. @SuppressWarnings({ "rawtypes", "unchecked" })
  34. public Predicate toPredicate(Root<?> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
  35. Path expression = null;
  36. if (fieldName.contains(".")) {
  37. String[] names = StringUtils.split(fieldName, ".");
  38. expression = root.get(names[0]);
  39. for (int i = 1; i < names.length; i++) {
  40. expression = expression.get(names[i]);
  41. }
  42. } else {
  43. expression = root.get(fieldName);
  44. }
  45. switch (operator) {
  46. case EQ:
  47. return builder.equal(expression, value);
  48. case NE:
  49. return builder.notEqual(expression, value);
  50. case LIKE:
  51. return builder.like((Expression<String>) expression, "%" + value + "%");
  52. case LT:
  53. return builder.lessThan(expression, (Comparable) value);
  54. case GT:
  55. return builder.greaterThan(expression, (Comparable) value);
  56. case LTE:
  57. return builder.lessThanOrEqualTo(expression, (Comparable) value);
  58. case GTE:
  59. return builder.greaterThanOrEqualTo(expression, (Comparable) value);
  60. default:
  61. return null;
  62. }
  63. }
  64. }