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

@Override
    public ResultListPO findAll(Long userId, int pageNo, int pageSize, String searchType, String searchContext) {
        // 1.构造自定义查询条件
        Specification<DataLibraryPO> queryCondition = (root, criteriaQuery, criteriaBuilder) -> {
            List<Predicate> predicateList = new ArrayList<>();
            //2.设置查询条件
            if (searchType != null) {
                if (searchType.equals("全部")) {
                    Expression<String> arg1 = criteriaBuilder.concat(criteriaBuilder.coalesce(root.get("tableEName"), ""), criteriaBuilder.coalesce(root.get("tableCName"), ""));
                    Expression<String> arg2 = criteriaBuilder.concat(criteriaBuilder.coalesce(root.get("dltId"), ""), criteriaBuilder.coalesce(root.get("groupName"), "0"));
                    Expression<String> arg3 = criteriaBuilder.concat(criteriaBuilder.coalesce(root.get("listOrder"), "0"), criteriaBuilder.coalesce(root.get("memo"), "0"));
                    Expression<String> arg4 = criteriaBuilder.concat(arg1, arg2);
                    Expression<String> 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<DataLibraryPO> 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;
    }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值