多条件查询接收很多参数的时候要用Map接收。
好处是,以后修改查询条件的时候不用从接口,到实现类,到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); //改成这样