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

原型:

@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

原文地址:https://www.cnblogs.com/heyang78/p/15540715.html