| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- package org.ccframe.commons.jpaquery;
- import javax.persistence.criteria.CriteriaBuilder;
- import javax.persistence.criteria.CriteriaQuery;
- import javax.persistence.criteria.Expression;
- import javax.persistence.criteria.Path;
- import javax.persistence.criteria.Predicate;
- import javax.persistence.criteria.Root;
- import org.apache.commons.lang3.StringUtils;
- /**
- * 简单条件表达式
- *
- * @author lee
- *
- */
- public class SimpleExpression implements Criterion {
- private String fieldName; // 属性名
- private Object value; // 对应值
- private Operator operator; // 计算符
- protected SimpleExpression(String fieldName, Object value, Operator operator) {
- this.fieldName = fieldName;
- this.value = value;
- this.operator = operator;
- }
- public String getFieldName() {
- return fieldName;
- }
- public Object getValue() {
- return value;
- }
- public Operator getOperator() {
- return operator;
- }
- @SuppressWarnings({ "rawtypes", "unchecked" })
- public Predicate toPredicate(Root<?> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
- Path expression = null;
- if (fieldName.contains(".")) {
- String[] names = StringUtils.split(fieldName, ".");
- expression = root.get(names[0]);
- for (int i = 1; i < names.length; i++) {
- expression = expression.get(names[i]);
- }
- } else {
- expression = root.get(fieldName);
- }
- switch (operator) {
- case EQ:
- return builder.equal(expression, value);
- case NE:
- return builder.notEqual(expression, value);
- case LIKE:
- return builder.like((Expression<String>) expression, "%" + value + "%");
- case LT:
- return builder.lessThan(expression, (Comparable) value);
- case GT:
- return builder.greaterThan(expression, (Comparable) value);
- case LTE:
- return builder.lessThanOrEqualTo(expression, (Comparable) value);
- case GTE:
- return builder.greaterThanOrEqualTo(expression, (Comparable) value);
- default:
- return null;
- }
- }
- }
|