springBootJpa的復雜查詢


分頁

/**
     * 條件查詢+分頁
     * @param whereMap
     * @param page
     * @param size
     * @return
     */
    public Page<CaseManage> findSearch(Map whereMap, int page, int size,Integer createId) {
        Sort sort = new Sort(Sort.Direction.DESC,"id");
        Specification<CaseManage> specification = createSpecification(whereMap,createId);
        PageRequest pageRequest = new PageRequest(page,size,sort);
        return caseDao.findAll(specification, pageRequest);
    }
    
    /**
     * 條件查詢
     * @param whereMap
     * @return
     */
    public List<CaseManage> findSearch(Map whereMap,Integer createId) {
        Specification<CaseManage> specification = createSpecification(whereMap, createId);
        return caseDao.findAll(specification);
    }
    
    /**
     * 動態條件構建
     * @param searchMap
     * @return
     */
    private Specification<CaseManage> createSpecification(Map searchMap,Integer createId) {

        return new Specification<CaseManage>() {

            @Override
            public Predicate toPredicate(Root<CaseManage> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                List<Predicate> predicateList = new ArrayList<Predicate>();
                // 案件名稱
                if (searchMap.get("case_name")!=null && !"".equals(searchMap.get("case_name"))) {
                    predicateList.add(cb.like(root.get("case_name").as(String.class), "%"+(String)searchMap.get("case_name")+"%"));
                }
                // 案件編號uuid類型
                if (searchMap.get("case_uuid")!=null && !"".equals(searchMap.get("case_uuid"))) {
                    predicateList.add(cb.equal(root.get("case_uuid").as(String.class), (String)searchMap.get("case_uuid")));
                }
                return cb.and( predicateList.toArray(new Predicate[predicateList.size()]));

            }
        };

    }

 

or查詢

想實現這樣的效果

where (state=1 or state=2and name='zhangsan'

java代碼

List<Predicate> predicateList = new ArrayList<Predicate>();
Predicate or = cb.or(cb.and(cb.equal(root.get("case_authority").as(String.class), "0")), cb.and(cb.equal(root.get("create_id").as(String.class), String.valueOf(createId))));
predicateList.add(or);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM