Jpa條件查詢組合查詢and 和 or同時用


更多精彩文章歡迎關注公眾號“Java之康庄大道”

 

條件查詢,各個條件之間是and並且&&關系,其中地理信息省市區縣,例如河北省,要包括其下屬所有城市,每個城市包括下屬區縣,只選擇河北省時候,要查詢的是河北省所有的,他們之間是or 或者 ||關系

如果寫sql,很好完成where t.id = 1 and t.name=‘hbs and (t.region='河北省‘ or t.region='石家庄市’........等等)

如果JPA怎么寫條件查詢呢?

感謝  https://blog.csdn.net/langyan122/article/details/80608383  這篇文章的作者。

 

我的應用如下所示:

public Page<Crossing> findAll(String crossingCode, String crossingName, Integer crossingType, Integer lightshape,
            String region, Pageable pageable) {
        
        Page<Crossing> pageList = getCrossingDao().findAll((root,query,cb)-> {

                List<Predicate> list = new ArrayList<Predicate>();
                if(crossingCode!=null && crossingCode!="") {
                    list.add(cb.like(root.get("code"), "%"+crossingCode+"%"));
                }
                if(crossingName!=null && crossingName!="") {
                    list.add(cb.like(root.get("name"), "%"+crossingName+"%"));
                }
                if(crossingType!=-1) {
                    list.add(cb.equal(root.get("crossingTypeId"), crossingType));
                }
                if(lightshape!=-1) {
                    list.add(cb.equal(root.get("lightshapeId"), lightshape));
                }
                
                Predicate[] array = new Predicate[list.size()];
                Predicate Pre_And = cb.and(list.toArray(array));
                
                List<Predicate> listOr = new ArrayList<Predicate>();
                if(region!="") {
                    String arr[] = region.split(",");
                    for(int i=0;i<arr.length;i++) {
                        if(arr[i]!=null && arr[i]!="") {
                            listOr.add(cb.equal(root.get("regionId"), arr[i]));
                            
                        }
                    }
                    Predicate[] arrayOr = new Predicate[listOr.size()];
                    Predicate Pre_Or = cb.or(listOr.toArray(arrayOr));
                    return query.where(Pre_And,Pre_Or).getRestriction();
                }else{
                    return null;
                }
                    
                
        }, pageable);

    return pageList; }

遇到的困難,記載之;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM