• 多条件查询接收很多参数的时候要用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); //改成这样
  • 相关阅读:
    HDU-1527 取石子游戏
    HDU-1846 Brave Game
    HDU-1850 Being a Good Boy in Spring Festival
    HDU-2509 Be the Winner
    HDU-1907 John
    HDU-1969 Pie
    HDU-1501 Zipper
    HDU-2289 Cup
    最大子矩阵和
    HDU3466(01背包变种)
  • 原文地址:https://www.cnblogs.com/yunqing/p/10007702.html
Copyright © 2020-2023  润新知