【spring data jpa】jpa中criteria拼接in查询

 示例代码:

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();
            }
        };
        
    }
原文地址:https://www.cnblogs.com/sxdcgaq8080/p/9625797.html