• 记一次后台分页函数的简化


    原型:

    @RestController
    public class ReputationRestCtrl {
        @Autowired
        private ReputationMapper rptnMapper;
        
        @RequestMapping(value="/pagedQueryRptn", method=RequestMethod.GET)
        public Map<String,Object> pagedQueryRptn(int pageNo){
            Map<String,Object> retvalMap=new LinkedHashMap<String,Object>();
            retvalMap.put("pageNo", pageNo);
            
            final int PAGE_SIZE=5;
            int totalCount=rptnMapper.countAlive();
            retvalMap.put("totalCount", totalCount);
            
            int pageCount=(int)Math.ceil((double)totalCount/PAGE_SIZE);
            retvalMap.put("pageCount", pageCount);
            
            int start=pageNo*PAGE_SIZE;
            int end=(pageNo+1)*PAGE_SIZE;
            List<Reputation> datasInPage=rptnMapper.pagedQueryAlive(start, end);
            retvalMap.put("rptns", datasInPage);
                
            return retvalMap;
        }
    }

    问题

    需要分页的地方很多,上面代码如不改会有四到五处大同小异的代码。

    修改方案

    做一个PageUtil类,将共性内容放入,将个性部分留在原地。

    结果

    PageUtil类:

    package com.hy.myapp.rest;
    
    import java.util.LinkedHashMap;
    import java.util.List;
    import java.util.Map;
    
    public class PageUtil {
        private static final String DATAS2 = "datas";
        private static final String PAGE_COUNT = "pageCount";
        private static final String TOTAL_COUNT = "totalCount";
        private static final String PAGE_NO = "pageNo";
    
        public static Map<String,Object> packPagedMap(int pageNo,
                                                int pageSize,
                                                int totalCount,
                                                List<?> datas){
            
            Map<String,Object> retvalMap=new LinkedHashMap<String,Object>();
            retvalMap.put(PAGE_NO, pageNo);
            retvalMap.put(TOTAL_COUNT, totalCount);
            
            int pageCount=(int)Math.ceil((double)totalCount/pageSize);
            retvalMap.put(PAGE_COUNT, pageCount);
            retvalMap.put(DATAS2, datas);
            
            return retvalMap;
        }
        
        public static int figureStart(int pageNo,int pageSize) {
            return pageNo*pageSize;
        }
        
        public static int figureEnd(int pageNo,int pageSize) {
            return (pageNo+1)*pageSize;
        }
    }

    原类:

    @RestController
    public class ReputationRestCtrl{
        @Autowired
        private ReputationMapper rptnMapper;
        
        @RequestMapping(value="/pagedQueryRptn", method=RequestMethod.GET)
        public Map<String,Object> pagedQueryRptn(int pageNo){
            final int PAGE_SIZE=5;
            return PageUtil.packPagedMap(pageNo,
                                       PAGE_SIZE,
                                       rptnMapper.countAlive(),
                                       rptnMapper.pagedQueryAlive(PageUtil.figureStart(pageNo,PAGE_SIZE), PageUtil.figureEnd(pageNo,PAGE_SIZE)));
        }
    }

    END

  • 相关阅读:
    gerrit权限控制
    kvm虚拟机根目录磁盘扩容
    vim新手指南
    精通 vim 你应该理解的几个名词
    精通 VIM ,此文就够了
    linux下库的使用--动态库
    linux下库的使用--静态库
    linux下程序编译的各个阶段记录
    ASCII码表
    重构的过程记录--之利用系统数据库:
  • 原文地址:https://www.cnblogs.com/heyang78/p/15540715.html
Copyright © 2020-2023  润新知