多条件查询接收很多参数的时候要用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); //改成这样

 

posted @ 2018-11-23 15:07  云晴  阅读(2762)  评论(0编辑  收藏  举报