JPA criteria 查询的查询条件组合
JPA criteria查询,相比使用HQL或者JPQL,类型安全,更加的面向对象。本文只关注使用,不包含概念等需要深入、比较晦涩的内容。
- 预备
- 且,相当于AND
- 或,相当于OR
- 包含、不包含,相当于IN、NOT IN
- 是null、不是null,相当于IS NULL、IS NOT NULL
- 在列表中、不在列表中,相当于IN、NOT IN
预备
CriteriaBuilder criteriaBuilder = this.entityManager.getCriteriaBuilder();
CriteriaQuery<BoxGraphAnalysis> criteriaQuery = criteriaBuilder.createQuery(BoxGraphAnalysis.class);
Root<BoxGraphAnalysis> root = criteriaQuery.from(BoxGraphAnalysis.class);
criteriaQuery.select(root);
Predicate predicate = criteriaBuilder.conjunction();
CriteriaQuery 安全查询主语句
CriteriaQuery<School> criteriaQuery = criteriaBuilder.createQuery(School.class);
可创建Root,查询的开始
且
predicate = criteriaBuilder.and(predicate, root.get("subjectId").isNull());
或
predicate = criteriaBuilder.or(predicate, root.get("subjectId").isNull());
包含、不包含
predicate = criteriaBuilder.and(predicate, root.get("code").in(codes));
predicate = criteriaBuilder.and(predicate, root.get("code").in(codes).not());
Predicate 过滤条件
Predicate predicate = criteriaBuilder.conjunction();