封装通用分页工具,通过反射指定具体的实现类
来源:互联网 发布:捷孚凯市场咨询知乎 编辑:程序博客网 时间:2024/06/06 13:03
分页具体实现类
import java.util.ArrayList;import java.util.List;public class NavPageInfo { private static final Integer DEAFULT_PAGE_SIZE = 10; //每页默认记录数 private static final Integer DEAFULT_PAGENO_STEP = 3; //默认页码步长长度 private Integer pageNoStep; //页码步长长度 private Integer reqeustPage; //请求页号,临时变量 private Integer limitCount = 0; //最多多少条 private Integer realCount; //记录总数(实际) private Integer recordCount; //记录总数 private Integer pageSize; //每页记录数 private Integer pageNum; //页数 private Integer curPage; //当前页号,从1开始 private Integer showPreNo; //ui显示:上一页 private Integer showNextNo; //ui显示:下一页 private Integer showFirstNo; //ui显示:第一页 private Integer showLastNo; //ui显示:最后一页 private List<Integer> showPnoLst; //页码列表,如"1, 2, 3, 4, 5" public Integer getPageNoStep() { return pageNoStep; } public void setPageNoStep(Integer pageNoStep) { this.pageNoStep = pageNoStep; } public Integer getReqeustPage() { return reqeustPage; } public void setReqeustPage(Integer reqeustPage) { this.reqeustPage = reqeustPage; } public Integer getLimitCount() { return limitCount; } public void setLimitCount(Integer limitCount) { this.limitCount = limitCount; } public Integer getRealCount() { return realCount; } public void setRealCount(Integer realCount) { this.realCount = realCount; } public Integer getRecordCount() { return recordCount; } public Integer getPageSize() { return pageSize; } public void setPageSize(Integer pageSize) { this.pageSize = pageSize; } public Integer getPageNum() { return pageNum; } public void setPageNum(Integer pageNum) { this.pageNum = pageNum; } public Integer getCurPage() { return curPage; } public void setCurPage(Integer curPage) { this.curPage = curPage; } public Integer getShowPreNo() { return showPreNo; } public void setShowPreNo(Integer showPreNo) { this.showPreNo = showPreNo; } public Integer getShowNextNo() { return showNextNo; } public void setShowNextNo(Integer showNextNo) { this.showNextNo = showNextNo; } public Integer getShowFirstNo() { return showFirstNo; } public void setShowFirstNo(Integer showFirstNo) { this.showFirstNo = showFirstNo; } public Integer getShowLastNo() { return showLastNo; } public void setShowLastNo(Integer showLastNo) { this.showLastNo = showLastNo; } public List<Integer> getShowPnoLst() { return showPnoLst; } public void setShowPnoLst(List<Integer> showPnoLst) { this.showPnoLst = showPnoLst; } //构造函数 public NavPageInfo() { initPageInfo(0, DEAFULT_PAGE_SIZE, DEAFULT_PAGENO_STEP, 0); } public NavPageInfo(Integer reqeustPage) { initPageInfo(reqeustPage, DEAFULT_PAGE_SIZE, DEAFULT_PAGENO_STEP, 0); } public NavPageInfo(Integer reqeustPage, Integer pageSize) { initPageInfo(reqeustPage, pageSize, DEAFULT_PAGENO_STEP, 0); } public NavPageInfo(Integer reqeustPage, Integer pageSize, Integer limitPageNum) { initPageInfo(reqeustPage, pageSize, DEAFULT_PAGENO_STEP, limitPageNum); } public NavPageInfo(Integer reqeustPage, Integer pageSize, Integer pageNoStep, Integer limitPageNum) { initPageInfo(reqeustPage, pageSize, pageNoStep, limitPageNum); } private void initPageInfo(Integer reqeustPage, Integer pageSize, Integer pageNoStep, Integer limitPageNum) { this.reqeustPage = reqeustPage; this.pageSize = pageSize; this.pageNoStep = pageNoStep; this.limitCount = pageSize * limitPageNum; } //获取偏移 public int getOffset() { int offset = (curPage - 1) * pageSize; if(offset < 0) { offset = 0; } return offset; } //设置记录个数,并且设置导航信息 public void setRecordCount(Integer recordCount) { if(recordCount == null) { recordCount = 0; reqeustPage = 0; //非法时,默认请求第一页 } this.realCount = recordCount; if(limitCount > 0 && recordCount > limitCount) { recordCount = limitCount; } this.recordCount = recordCount; pageNum = (recordCount + pageSize - 1) / pageSize; //页数 if(reqeustPage < 1) { //零结果 curPage = 1; } else if(reqeustPage > pageNum) { //非法请求 curPage = pageNum; } else { curPage = reqeustPage; } setPageNavigation(); } private void setPageNavigation() { if(curPage <= 1) { //上一页 showPreNo = null; } else { showPreNo = curPage - 1; } if(curPage >= pageNum) { //下一页 showNextNo = null; } else { showNextNo = curPage + 1; } if(pageNum > 0) { //首尾页=1,8 showFirstNo = 1; showLastNo = pageNum; } else { showFirstNo = null; showLastNo = null; } showPnoLst = new ArrayList<Integer>(); //(1, pageNum) for(int i = pageNoStep; i > 0; i--) { //左边导航=2,3,4 if(curPage - i > 1) { showPnoLst.add(curPage - i); } } if(curPage > 1 && curPage < pageNum) { //当前页=5 showPnoLst.add(curPage); } for(int i = 1; i < pageNoStep; i++) { //右边导航=6,7 if(curPage + i < pageNum) { showPnoLst.add(curPage + i); } } }}
分页数据集成
import java.util.List;public class DataNavPage <T> { private NavPageInfo pageInfo; private List<T> data; public NavPageInfo getPageInfo() { return pageInfo; } public void setPageInfo(NavPageInfo pageInfo) { this.pageInfo = pageInfo; } public List<T> getData() { return data; } public void setData(List<T> data) { this.data = data; }}
具体实现工具类
import java.lang.reflect.Method;import java.util.List;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import com.lyt.base.constant.WebConst;import com.lyt.base.model.DataNavPage;import com.lyt.base.model.NavPageInfo;import com.lyt.base.parameter.BaseParameter;public class NavPagination <TData, TParm extends BaseParameter> { private Log log = LogFactory.getLog(NavPagination.class); @SuppressWarnings("unchecked") public DataNavPage<TData> getDataLst(Object dao, TParm tParm, String mtdCount, String mtdData) { if(tParm.getNavPageNo() == null) { tParm.setNavPageNo(1); //默认请求第一页 } Integer pageSize = tParm.getNavPageSize(); if(pageSize == null) { pageSize = WebConst.PAGE_SIZE; } NavPageInfo pageInfo = new NavPageInfo(tParm.getNavPageNo(), pageSize); Method methodCount = null; try { methodCount = dao.getClass().getMethod(mtdCount, tParm.getClass()); log.info(methodCount.getName()); } catch (Exception e) { log.error(e.getMessage()); return null; } Object obj = null; try { obj = methodCount.invoke(dao, tParm); //记录个数 } catch (Exception e) { log.error(e.getMessage()); return null; } Integer recordCount = (Integer)obj; pageInfo.setRecordCount(recordCount); log.info(recordCount); Method methodData = null; try { methodData = dao.getClass().getMethod(mtdData, tParm.getClass()); log.info(methodData.getName()); } catch (Exception e) { log.error(e.getMessage()); return null; } tParm.setNavPageSize(pageSize); tParm.setNavOffset(pageInfo.getOffset()); //设置偏移 try { obj = methodData.invoke(dao, tParm); //获取分页列表数据 } catch (Exception e) { log.error(e.getMessage()); return null; } List<TData> dataLst = (List<TData>)obj; DataNavPage<TData> dataPage = new DataNavPage<TData>(); dataPage.setData(dataLst); dataPage.setPageInfo(pageInfo); return dataPage; }}
基本用法
@Override public DataNavPage<SitUser> getUserLst(SitUserParm sitUserParm) { NavPagination<SitUser, SitUserParm> page = new NavPagination<>(); DataNavPage<SitUser> dataPage = page.getDataLst(sitUserDao, sitUserParm, "getUserCount", "getUserLst"); return dataPage; }
底层其实用到的就是反射机制。通过你传过来的参数去找方法名,方法执行具体对象。
0 0
- 封装通用分页工具,通过反射指定具体的实现类
- 通用的分页工具类
- 通过反射修改指定对象字段值的通用方法
- 分页的封装工具类
- 反射通用工具类
- 分页通用工具类
- 通用分页工具类
- 通用分页工具类
- 【Android】SQLite的工具类 ---- 通过反射把Cursor封装到VO对象
- SQLite的工具类 ---- 通过反射把Cursor封装到VO对象
- SQLite的工具类 ---- 通过反射把Cursor封装到VO对象
- 通过反射实现打印一维数组的通用方法
- 封装一分页的工具类
- 分页的具体实现方法
- 反射(通过反射写一个通用的设置某个对象的某个属性为指定的值)
- 反射_通过反射写一个通用的设置某个对象的某个属性为指定的值
- 反射-通过反射写一个通用的设置某个对象的某个属性为指定的值
- java通用分页工具类
- Servelt中过滤器运行原理
- 【XDebug】PHPStorm+XDebug+Firefox【原创】
- 矩阵
- Trapping Rain Water
- 浅谈如此有用的负margin
- 封装通用分页工具,通过反射指定具体的实现类
- redis缓存 SSM 后台框架 rest接口 下拉多级联动
- mvc类自动加载的编写(二)
- Leetcode 中 ListNode 的 reverse以及 快慢指针取中点
- jQuery对象与DOM对象
- 今天开启CSDN第一篇博客
- [转载]window.location.href 失效的解决办法
- easyx学习总结
- 比CMD强大的 wmic ,不用重启