记一次后台分页函数的简化
原型:
@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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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 取得当前日期时间(文本形式)