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

原型:

复制代码
@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

posted @   逆火狂飙  阅读(25)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
历史上的今天:
2019-11-11 【科学】中子星缘何还会有磁场?
2019-11-11 Spring StopWatch源码
2019-11-11 双11也不要乱买书
2017-11-11 【Canvas与艺术】蓝边八瓣花
2017-11-11 JS 数字左补零函数
2017-11-11 【高中数学/基本不等式】求函数f(x)=(3-x)^0.5+(x+3)^0.5的极值
2017-11-11 JS 取得当前日期时间(文本形式)
生当作人杰 死亦为鬼雄 至今思项羽 不肯过江东
点击右上角即可分享
微信分享提示