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);
原文地址:https://www.cnblogs.com/coder-lzh/p/10042306.html