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

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

        Specification<MpLog> specification = new Specification<MpLog>() {
            @SneakyThrows
            @Override
            public Predicate toPredicate(Root<MpLog> 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);
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容