SpringBoot JPA使用Specification多条件查询

public Specification<SwindleAccountEntity> exportSwindleAccountSpecification(ExportSwindleAccountRequest request) {
        return (root, criteriaQuery, criteriaBuilder) -> {
            List<Predicate> predicateList = new ArrayList<>();

            // 一级分行
            String firstBranch = request.getFirstBranch();
            if (StringUtils.isNotBlank(firstBranch)) {
                predicateList.add(criteriaBuilder.equal(root.get("firstBranch"), firstBranch));
            }
            // 开户网点
            String openAccountSite = request.getOpenAccountSite();
            if (StringUtils.isNotBlank(openAccountSite)) {
                predicateList.add(criteriaBuilder.equal(root.get("openAccountSite"), openAccountSite));
            }
            // 状态
            SwindleAccountStatus swindleAccountStatus = request.getSwindleAccountStatus();
            if (swindleAccountStatus != null) {
                predicateList.add(criteriaBuilder.equal(root.get("swindleAccountStatus"), swindleAccountStatus));
            }
            // 录入时间起始日期
            ZonedDateTime zonedDateTime = request.getStartInputTime();
            if (zonedDateTime != null) {
                LocalDateTime startInputTime = zonedDateTime.toLocalDateTime();
                predicateList.add(criteriaBuilder.greaterThanOrEqualTo(root.get("createDatetime").as(LocalDateTime.class), startInputTime));
            }
            // 录入时间结束日期
            ZonedDateTime zonedDateEndTime = request.getEndInputTime();
            if (zonedDateEndTime != null) {
                LocalDateTime endInputTime = zonedDateEndTime.toLocalDateTime();
                predicateList.add(criteriaBuilder.lessThanOrEqualTo(root.get("createDatetime").as(LocalDateTime.class), endInputTime));
            }
            // 网点开户起始日期
            LocalDate startOpenAccountDate = request.getStartOpenAccountDate();
            if (startOpenAccountDate != null) {
                predicateList.add(criteriaBuilder.greaterThanOrEqualTo(root.get("openAccountDate").as(LocalDate.class), startOpenAccountDate));
            }
            // 网点开户结束日期
            LocalDate endOpenAccountDate = request.getEndOpenAccountDate();
            if (endOpenAccountDate != null) {
                predicateList.add(criteriaBuilder.lessThanOrEqualTo(root.get("openAccountDate").as(LocalDate.class), endOpenAccountDate));
            }
            
            /** * order By */
            Order createDateOrder = criteriaBuilder.desc(root.get("createDatetime"));
            return criteriaQuery.orderBy(createDateOrder).where(predicateList.toArray(new Predicate[predicateList.size()])).getRestriction();

        };
    }
public Specification<SwindleAccountEntity> getSwindleAccountSpecification(QuerySwindleAccountRequest request) {
        return (root, criteriaQuery, criteriaBuilder) -> {
            // 增加筛选条件
            Predicate predicate = criteriaBuilder.conjunction();
            // 一级分行
            String firstBranch = request.getFirstBranch();
            if (StringUtils.isNotBlank(firstBranch)) {
                predicate = criteriaBuilder.and(predicate, criteriaBuilder.equal(root.get("firstBranch"), firstBranch));
            }
            // 开户网点
            String openAccountSite = request.getOpenAccountSite();
            if (StringUtils.isNotBlank(openAccountSite)) {
                predicate = criteriaBuilder.and(predicate, criteriaBuilder.equal(root.get("openAccountSite"), openAccountSite));
            }
            // 状态
            SwindleAccountStatus swindleAccountStatus = request.getSwindleAccountStatus();
            if (swindleAccountStatus != null) {
                predicate = criteriaBuilder.and(predicate, criteriaBuilder.equal(root.get("swindleAccountStatus"), swindleAccountStatus));
            }
            // 录入时间起始日期
            ZonedDateTime zonedDateTime = request.getStartInputTime();
            if (zonedDateTime != null) {
                LocalDateTime startInputTime = zonedDateTime.toLocalDateTime();
                predicate = criteriaBuilder.and(predicate, criteriaBuilder.greaterThanOrEqualTo(root.get("createDatetime").as(LocalDateTime.class), startInputTime));
            }
            // 录入时间结束日期
            ZonedDateTime zonedDateEndTime = request.getEndInputTime();
            if (zonedDateEndTime != null) {
                LocalDateTime endInputTime = zonedDateEndTime.toLocalDateTime();
                predicate = criteriaBuilder.and(predicate, criteriaBuilder.lessThanOrEqualTo(root.get("createDatetime").as(LocalDateTime.class), endInputTime));
            }
            // 网点开户起始日期
            LocalDate startOpenAccountDate = request.getStartOpenAccountDate();
            if (startOpenAccountDate != null) {
                predicate = criteriaBuilder.and(predicate, criteriaBuilder.greaterThanOrEqualTo(root.get("openAccountDate").as(LocalDate.class), startOpenAccountDate));
            }
            // 网点开户结束日期
            LocalDate endOpenAccountDate = request.getEndOpenAccountDate();
            if (endOpenAccountDate != null) {
                predicate = criteriaBuilder.and(predicate, criteriaBuilder.lessThanOrEqualTo(root.get("openAccountDate").as(LocalDate.class), endOpenAccountDate));
            }
            return predicate;
        };
    }

猜你喜欢

转载自blog.csdn.net/qq_33371766/article/details/114228251