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

分页具体实现类


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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值