创建一个Specification<T> 对象 根据你的条件
private Specification<MemberProductBack> createSpecification(MemberProductBack memberProductBack) {
Specification<MemberProductBack> specification = (Root<MemberProductBack> root, CriteriaQuery<?> query, CriteriaBuilder cb) -> {
List<Predicate> predicates = new ArrayList<>();
if(memberProductBack.getMemberId()!=null){
predicates.add(cb.equal(root.get("memberId").as(Long.class), memberProductBack.getMemberId()));
}
if(memberProductBack.getOrderSn()!=null){
predicates.add(cb.equal(root.get("orderSn").as(String.class), memberProductBack.getOrderSn()));
}
if(memberProductBack.getBackState()!=null){
if(memberProductBack.getBackState().contains(",")){
String[] split = memberProductBack.getBackState().split(",");
CriteriaBuilder.In<Object> in = cb.in(root.get("backState"));
for (String s : split) {
in.value(s);
}
predicates.add(in);
}else{
predicates.add(cb.equal(root.get("backState").as(String.class), memberProductBack.getBackState()));
}
}
if ( !queryLog.isEmpty()) {
predicates.add(cb.like(root.get("name1"),"%"+queryLog+"%"));
}
return cb.and(predicates.toArray(new Predicate[predicates.size()]));
};
return specification;
}
两种常用的 equal 和 in