Spring-Data Jpa 多条件查询,为空值时不作为查询条件

有的业务场景需要我们可选多个条件进行查询,这时要是写死查询条件就会很不方便了,我们可以使用Specification来构建过滤条件。
如下是使用例子:

        Specification specification = new Specification() {
            @SneakyThrows
            @Override
            public Predicate toPredicate(Root root, CriteriaQuery criteriaQuery, CriteriaBuilder criteriaBuilder) {
                //增加筛选条件
                Predicate predicate = criteriaBuilder.conjunction();
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                //按申办流水号
                if (!CheckUtil.isNullorEmpty(sblshShort)) {
                    predicate.getExpressions().add(criteriaBuilder.equal(root.get("sblshShort"),sblshShort));
                }
                //按服务名
                if (!CheckUtil.isNullorEmpty(serviceName)) {
                    predicate.getExpressions().add(criteriaBuilder.equal(root.get("serviceName"),serviceName));
                }
                //状态
                if (!CheckUtil.isNullorEmpty(status)) {
                    predicate.getExpressions().add(criteriaBuilder.equal(root.get("serviceFlag"),Integer.valueOf(status)));
                }
                //开始时间
                if (!CheckUtil.isNullorEmpty(startDate)) {
                    predicate.getExpressions().add(criteriaBuilder.greaterThan(root.get("usetime"),sdf.parse(startDate)));
                }
                //结束时间
                if (!CheckUtil.isNullorEmpty(endDate)) {
                    predicate.getExpressions().add(criteriaBuilder.lessThan(root.get("usetime"),sdf.parse(endDate)));
                }
                return predicate;
            }
        };
        PageRequest pageRequest = PageRequest.of(page, size);
        return mpLogDao.findAll(specification,pageRequest);
    }

你可能感兴趣的:(Spring-Data Jpa 多条件查询,为空值时不作为查询条件)