JPA多條件組合查詢,多表關聯查詢,資料條數(CriteriaQuery)
阿新 • • 發佈:2019-01-31
JPA多條件組合查詢(CriteriaQuery)
/**查詢Demo結果集 * @return */ public List<Demo> findDemoList(ParamVO param,Pageable pageable,List<Integer> userIds){ List<Demo> result = demoRepository.findAll(new Specification<Demo>(){ @Override public Predicate toPredicate(Root<Demo> root, CriteriaQuery<?> query, CriteriaBuilder cb) { List<Predicate> predicates = new ArrayList<Predicate>(); // is null predicates.add(root.get("fId").isNull()); // = if(!StringUtils.isNoneBlank(param.getPoName())){ predicates.add(cb.equal(root.get("poName"), "%"+param.getPoName()+"%")); } // like if(!StringUtils.isNoneBlank(param.getPoName())){ predicates.add(cb.like(root.get("poName"), "%"+param.getPoName()+"%")); } // between if(!StringUtils.isNoneBlank(param.getBeginDate())&&!StringUtils.isNoneBlank(param.getEndDate())){ predicates.add(cb.between(root.get("date"), param.getBeginDate(),param.getEndDate())); } //in predicates.add(root.get("userId").in(userIds)); return query.where(predicates.toArray(new Predicate[predicates.size()])).getRestriction(); } },pageable).getContent(); return result; }
多表關聯查詢:1.左連線
JPA多對多的關聯欄位:roleList
@ManyToMany
@JoinTable(name = "user_role_r", joinColumns = { @JoinColumn(name = "userId") }, inverseJoinColumns ={@JoinColumn(name = "roleId") })
private List<Role> roleList;
JPA左連線查詢在上面的模板上新增下面條件。
if(null!=param.getRole()){ //左連線 Join<User,Role> join = root.join("roleList",JoinType.LEFT); predicates.add(cb.equal(join.get("id"),param.getRole())); }
資料條數(count)
public Integer findCountReport(Integer orgId){ //多條件查詢 Long count= demoRepository.count(new Specification<Demo>(){ @Override public Predicate toPredicate(Root<Demo> root, CriteriaQuery<?> query, CriteriaBuilder cb) { List<Predicate> predicates = new ArrayList<Predicate>(); if(null!=orgId&&orgId.intValue()!=0){ predicates.add(cb.equal(root.get("orgId"), orgId)); } return query.where(predicates.toArray(new Predicate[predicates.size()])).getRestriction(); } }); return count.intValue(); }
2018-07-24
新增 JPA時間比較方法
1.between - findByStartDateBetween … where x.startDate between ?1 and ?2
2.lessThan/lessThanEqual
lessThan - findByEndLessThan … where x.start< ?1
lessThanEqual findByEndLessThanEqual … where x.start <= ?1
3.greaterThan/greaterThanEqual
greaterThan - findByStartGreaterThan … where x.end> ?1
greaterThanEqual - findByStartGreaterThanEqual … where x.end>= ?1