好處是,以后修改查詢條件的時候不用從接口,到實現類,到controller的參數都要修改,
假如加一個查詢條件,只需要前端多傳一個參數值,都用map<>鍵值對接收,只需要在
service實現類中,使用的時候多從get中取出一個值就好。
例如,接上一篇多條件查詢組合查詢的案例。
Controller改成:
/** * <b>按條件查詢路口信息。</b> * <p><b>詳細說明:</b></p> * <!-- 在此添加詳細說明 --> * 無。 * @param crossingCode 路口編號 * @param crossingName 路口名 * @param crossingType 路口類型 * @param lightshape 燈型 * @param region 區域 * @param page 第幾頁 * @param pageSize 每頁多少條 * @return */ /*@RequestMapping("/findAll") public final @ResponseBody JsonResult<Object> findAll(@RequestParam("crossingCode") String crossingCode, @RequestParam("crossingName") String crossingName, @RequestParam("crossingType") Integer crossingType, @RequestParam("lightshape") Integer lightshape, @RequestParam("region") String region, @RequestParam("page") int page,@RequestParam("pageSize") int pageSize) { try { Pageable pageable = PageRequest.of(page - 1, pageSize, Sort.by(Direction.DESC, "id")); Page<Crossing> crossingList = getCrossingService().findAll(crossingCode, crossingName, crossingType, lightshape, region, pageable); return JsonResult.toJsonResult(toPageSet(crossingList)); } catch (Exception e) { return JsonResult.toJsonResult(e); } }*/ @RequestMapping("/findAll") public final @ResponseBody JsonResult<Object> findAll(@RequestParam Map<String,Object> paramMap, @RequestParam("page") int page,@RequestParam("pageSize") int pageSize) { try { Pageable pageable = PageRequest.of(page - 1, pageSize, Sort.by(Direction.DESC, "id")); Page<Crossing> crossingList = getCrossingService().findAll(paramMap, pageable); return JsonResult.toJsonResult(toPageSet(crossingList)); } catch (Exception e) { return JsonResult.toJsonResult(e); } }
serviceimpl改成:
/** * 按條件查詢路口。 * @see com.tonsel.togt.service.CrossingService#findAll(java.lang.String, java.lang.String, * java.lang.Integer, java.lang.Integer, java.lang.Integer, org.springframework.data.domain.Pageable) */ @Override public Page<Crossing> findAll(Map<String,Object> paramMap,Pageable pageable) { Page<Crossing> pageList = getCrossingDao().findAll((root,query,cb)-> { List<Predicate> list = new ArrayList<Predicate>(); if(paramMap!=null) { if(paramMap.get("crossingCode")!=null && !"".equals(paramMap.get("crossingCode"))) {//從Map取值判斷是否為空 list.add(cb.like(root.get("code"), "%"+paramMap.get("crossingCode")+"%")); } if(paramMap.get("crossingName")!=null && !"".equals(paramMap.get("crossingName"))) { list.add(cb.like(root.get("name"), "%"+paramMap.get("crossingName")+"%")); } if(Integer.parseInt((String) paramMap.get("crossingType"))!=-1) { //Integer類型 list.add(cb.equal(root.get("crossingTypeId"), Integer.parseInt((String) paramMap.get("crossingType")))); } if(Integer.parseInt((String) paramMap.get("lightshape"))!=-1) { list.add(cb.equal(root.get("lightshapeId"), Integer.parseInt((String) paramMap.get("lightshape")))); } Predicate[] array = new Predicate[list.size()]; Predicate Pre_And = cb.and(list.toArray(array)); List<Predicate> listOr = new ArrayList<Predicate>(); if(paramMap.get("region")!=null && !"".equals(paramMap.get("region"))) { String arr[] = paramMap.get("region").toString().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; } }else { return null; } }, pageable);return pageList; }
service:
/** * <b>按條件查詢路口信息。</b> * <p><b>詳細說明:</b></p> * <!-- 在此添加詳細說明 --> * 無。 * @param crossingCode 路口編號 * @param crossingName 路口名 * @param crossingType 路口類型 * @param lightshape 燈型 * @param region 區域 * @param pageable 分頁條件 * @return */ //Page<Crossing> findAll(String crossingCode,String crossingName,Integer crossingType,Integer lightshape,String region,Pageable pageable); Page<Crossing> findAll(Map<String,Object> paramMap,Pageable pageable); //改成這樣
