代码如下:
@Override
public Page<FlowBusinessMapEntity> findByParam(QueryBusinessVo searchParam, Pageable pageable) {
// specification 是一个匿名内部类
Specification<FlowBusinessMapEntity> specification = new Specification<FlowBusinessMapEntity>() {
/**
*
* @param root 查询类型,根据实体类匹配类型
* @param query 查询条件
* @param cb 构建条件,有in,and,or,like等用法。
* @return
*/
@Override
public Predicate toPredicate(Root<FlowBusinessMapEntity> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
List<Predicate> predicates = new ArrayList<>();
if (!StringX.nullity(searchParam.getBusinessNo())) {
predicates.add(cb.equal(root.get("businessNo").as(String.class), searchParam.getBusinessNo()));
}
if (!StringX.nullity(searchParam.getBusinessType())) {
predicates.add(cb.equal(root.get("businessType").as(String.class), searchParam.getBusinessType()));
}
// IN的用法,可直接传list和数组。 list中数据类型,要与实体类中类型匹配,不然需要进行类型转换。
if (!StringX.nullity(searchParam.getState())) {
String[] split = searchParam.getState().split(",");
predicates.add(cb.in(root.get("state")).value(split));
}
if (searchParam.getStartDate() != null && searchParam.getEndDate() != null) {
predicates.add(cb.between(root.get("applyDate"), searchParam.getStartDate(), searchParam.getEndDate()));
}
if (!StringX.nullity(searchParam.getOperator())) {
predicates.add(cb.equal(root.get("operator").as(String.class), searchParam.getOperator()));
}
if (!StringX.nullity(searchParam.getCguid())) {
predicates.add(cb.equal(root.get("cguid").as(String.class), searchParam.getCguid()));
}
return query.where(predicates.toArray(new Predicate[predicates.size()])).getRestriction();
}
};
Page<FlowBusinessMapEntity> page = queryBusinessDao.findAll(specification, pageable);
return page;
}