示例代码:
public static Specification<GoodsType> where(final GoodsType goodsType){ return new Specification<GoodsType>() { @Override public Predicate toPredicate(Root<GoodsType> root, CriteriaQuery<?> query, CriteriaBuilder cb) { List<Predicate> predicates = new ArrayList<Predicate>(); //名字+拼音 String name = goodsType.getName(); if(StringUtils.isNotBlank(name)){ Predicate like1 = cb.like(root.<String>get("name"), "%" + name +"%"); Predicate like2 = cb.like(root.<String>get("pyAll"), "%" + PingYinUtil.getPingYin(name) +"%"); Predicate like3 = cb.like(root.<String>get("pyHead"), "%" + PingYinUtil.getPinYinHeadChar(name) +"%"); predicates.add(cb.or(like1,like2,like3)); } //uid String uid = goodsType.getUid(); if(StringUtils.isNotBlank(uid)){ predicates.add(cb.equal(root.<String>get("uid"),uid)); } //parentUid String parentUid = goodsType.getParentUid(); if(StringUtils.isNotBlank(parentUid)){ predicates.add(cb.equal(root.<String>get("parentUid"),parentUid)); } //启用 状态 Integer enabledFlag = goodsType.getEnabledFlag(); if (enabledFlag != null){ predicates.add(cb.equal(root.get("enabledFlag"),enabledFlag)); } //层级 Integer floor = goodsType.getFloor(); if (floor != null){ predicates.add(cb.equal(root.get("floor"),floor)); } //对外编码 String outerCode = goodsType.getOuterCode(); if(StringUtils.isNotBlank(outerCode)){ predicates.add(cb.equal(root.<String>get("outerCode"),outerCode)); } //对外id String outerId = goodsType.getOuterId(); if(StringUtils.isNotBlank(outerId)){ predicates.add(cb.equal(root.<String>get("outerId"),outerId)); } //租户ID String tid = goodsType.getTenementId(); if(StringUtils.isNotBlank(tid)){ predicates.add(cb.equal(root.<String>get("tenementId"),tid)); } String typeUidArrStr = goodsType.getTypeUidArrStr(); if (StringUtils.isNotBlank(typeUidArrStr)) { In<String> in = cb.in(root.<String>get("parentUid")); String[] split = typeUidArrStr.split(","); for (String string : split) { in.value(string); } predicates.add(in); } //未被删除 且 启用状态无视 predicates.add(cb.equal(root.get("delFlag"),GoodsType.DEL_FLAG_EXIST)); return query.where(predicates.toArray(new Predicate[predicates.size()])).getRestriction(); } }; }