Spring JPA实现多条件查询,全部条件查询

@Override
    public ResultListPO findAll(Long userId, int pageNo, int pageSize, String searchType, String searchContext) {
        // 1.构造自定义查询条件
        Specification queryCondition = (root, criteriaQuery, criteriaBuilder) -> {
            List predicateList = new ArrayList<>();
            //2.设置查询条件
            if (searchType != null) {
                if (searchType.equals("全部")) {
                    Expression arg1 = criteriaBuilder.concat(criteriaBuilder.coalesce(root.get("tableEName"), ""), criteriaBuilder.coalesce(root.get("tableCName"), ""));
                    Expression arg2 = criteriaBuilder.concat(criteriaBuilder.coalesce(root.get("dltId"), ""), criteriaBuilder.coalesce(root.get("groupName"), "0"));
                    Expression arg3 = criteriaBuilder.concat(criteriaBuilder.coalesce(root.get("listOrder"), "0"), criteriaBuilder.coalesce(root.get("memo"), "0"));
                    Expression arg4 = criteriaBuilder.concat(arg1, arg2);
                    Expression arg5 = criteriaBuilder.concat(arg3, arg4);
                    //如果查询全部,则需要拼接所有参数
                    predicateList.add(criteriaBuilder.like(arg5, "%" + searchContext + "%"));
                } else if (searchType.equals("createdAt") || searchType.equals("updatedAt")) {
                    String[] times = searchContext.split("-");
                    predicateList.add(criteriaBuilder.between(root.get(searchType), times[0], times[1]));
                } else {
                    predicateList.add(criteriaBuilder.like(root.get(searchType), "%" + searchContext + "%"));
                }
            }
            //3.设置固定查询条件,如用户id,等。
            predicateList.add(criteriaBuilder.like(root.get("userId"), userId.toString()));
            return criteriaBuilder.and(predicateList.toArray(new Predicate[0]));
        };
        //4.设置排序方式
        Sort.Direction sort = Sort.Direction.ASC;
        //5.设置分页方式
        //PageRequest继承于AbstractPageRequest并且实现了Pageable
        //获取PageRequest对象 index:页码 从0开始  size每页容量 sort排序方式 "id"->properties 以谁为准排序
        Pageable pageable = PageRequest.of(pageNo - 1, pageSize, sort, "listOrder");
        //6.查询
        Page page = dao.findAll(queryCondition, pageable);
        //7.格式化数据
        ResultListPO resultListPO = new ResultListPO();
        resultListPO.setPageSize(pageSize);
        resultListPO.setPageNo(pageNo);
        resultListPO.setTotalCount(page.getTotalElements());
        resultListPO.setTotalPages(page.getTotalPages());
        resultListPO.setContent(page.getContent());
        return resultListPO;
    }

你可能感兴趣的:(spring,数据库,java)