多條件查詢接收很多參數的時候要用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); //改成這樣

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM