分页具体实现类
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;
}
底层其实用到的就是反射机制。通过你传过来的参数去找方法名,方法执行具体对象。