更多精彩文章歡迎關注公眾號“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; }
遇到的困難,記載之;