封装通用分页工具,通过反射指定具体的实现类

来源:互联网 发布:捷孚凯市场咨询知乎 编辑:程序博客网 时间: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
原创粉丝点击