有的业务场景需要我们可选多个条件进行查询,这时要是写死查询条件就会很不方便了,我们可以使用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);
}