package org.ccframe.commons.jpaquery; import java.util.ArrayList; import java.util.List; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; import org.springframework.data.jpa.domain.Specification; /** * 定义一个查询条件容器 * @author Jim */ public class Criteria implements Specification{ /** * */ private static final long serialVersionUID = 7723262888497747481L; private List criterionList = new ArrayList(); public Criteria(){}; public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder builder) { if (!criterionList.isEmpty()) { List predicates = new ArrayList(); for(Criterion c : criterionList){ predicates.add(c.toPredicate(root, query,builder)); } // 将所有条件用 and 联合起来 if (predicates.size() > 0) { return builder.and(predicates.toArray(new Predicate[predicates.size()])); } } return builder.conjunction(); } /** * 增加简单条件表达式 */ public Criteria add(Criterion criterion){ if(criterion!=null){ criterionList.add(criterion); } return this; } }