1. 程式人生 > >JPA多條件組合查詢,多表關聯查詢,資料條數(CriteriaQuery)

JPA多條件組合查詢,多表關聯查詢,資料條數(CriteriaQuery)

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