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

 示例代码:

 

public static Specification where(final GoodsType goodsType){
        
        
        return new Specification() {
            
            @Override
            public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) {
                
                List predicates = new ArrayList();  
                //名字+拼音
                String name = goodsType.getName();
                if(StringUtils.isNotBlank(name)){
                    Predicate like1 = cb.like(root.get("name"), "%" + name +"%");
                    Predicate like2 = cb.like(root.get("pyAll"), "%" + PingYinUtil.getPingYin(name) +"%");
                    Predicate like3 = cb.like(root.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.get("uid"),uid));
                }
                
                //parentUid
                String parentUid = goodsType.getParentUid();
                if(StringUtils.isNotBlank(parentUid)){
                    predicates.add(cb.equal(root.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.get("outerCode"),outerCode));
                }
                //对外id
                String outerId = goodsType.getOuterId();
                if(StringUtils.isNotBlank(outerId)){
                    predicates.add(cb.equal(root.get("outerId"),outerId));
                }
                
                //租户ID
                String tid = goodsType.getTenementId(); 
                if(StringUtils.isNotBlank(tid)){
                    predicates.add(cb.equal(root.get("tenementId"),tid));
                }
                
                String typeUidArrStr = goodsType.getTypeUidArrStr();
                if (StringUtils.isNotBlank(typeUidArrStr)) {
                    In in = cb.in(root.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();
            }
        };
        
    }

 

你可能感兴趣的:(java,数据库)