PageHelper 分页类

分页类: PageHelper.java

package util.helper;

public class PageHelper {

    /** Configuration PageHelper **/

    protected int pageSize;
    protected int linkCount;

    public PageHelper(int pageSize, int linkCount){
        this.pageSize = pageSize;
        this.linkCount = linkCount;
    }

    public int getPageSize() {
        return pageSize;
    }

    public int getLinkCount() {
        return linkCount;
    }

    /** Configuration PageHelper End **/

    /** Set PageHelper **/

    protected int rowCount = 0;
    protected int currentPage = 1;

    public int getRowCount() {
        return rowCount;
    }

    public void setRowCount(int rowCount) {
        if(0 <= rowCount){
            this.rowCount = rowCount;
            this.updatePageCount();
        }
    }

    public int getCurrentPage() {
        return currentPage;
    }

    public void setCurrentPage(int currentPage) {
        if(1 <= currentPage && currentPage <= pageCount){
            this.currentPage = currentPage;
            this.updateBeginIndex();
            this.updateHasPrevPage();
            this.updateHasNextPage();
            this.updateStartPage();
        }
    }

    /** Set PageHelper End **/

    /** Operator PageHelper **/

    protected int pageCount = 1;
    protected int beginIndex = 0;

    protected boolean hasPrevPage = false;
    protected int prevPage = 1;
    protected boolean hasNextPage = false;
    protected int nextPage = 1;

    protected int startPage = 1;
    protected int endPage = 1;

    public int getPageCount() {
        return pageCount;
    }

    public int getBeginIndex() {
        return beginIndex;
    }

    public boolean isHasPrevPage() {
        return hasPrevPage;
    }

    public int getPrevPage() {
        return prevPage;
    }

    public boolean isHasNextPage() {
        return hasNextPage;
    }

    public int getNextPage() {
        return nextPage;
    }

    public int getStartPage() {
        return startPage;
    }

    public int getEndPage() {
        return endPage;
    }

    /** Operator PageHelper End **/

    /** Update PageHelper **/

    protected void updatePageCount(){
        // from 1 to pageCount
        pageCount = (rowCount - 1) / pageSize + 1;
        this.updateHasNextPage();
        this.updateStartPage();
    }

    protected void updateBeginIndex(){
        // from (currentPage - 1) * pageSize to currentPage * pageSize - 1
        beginIndex = (currentPage - 1) * pageSize;
    }

    protected void updateHasPrevPage(){
        hasPrevPage = 1 < currentPage;
        this.updatePrevPage();
    }

    protected void updatePrevPage(){
        if(hasPrevPage){
            prevPage = currentPage - 1;
        }else{
            prevPage = currentPage;
        }
    }

    protected void updateHasNextPage(){
        hasNextPage = pageCount > currentPage;
        this.updateNextPage();
    }

    protected void updateNextPage(){
        if(hasNextPage){
            nextPage = currentPage + 1;
        }else{
            nextPage = currentPage;
        }
    }

    protected void updateStartPage(){
        int mid = (linkCount + 1) / 2;
        if(currentPage <= mid){
            startPage = 1;
        }else if(pageCount - currentPage < mid){
            startPage = pageCount - linkCount + 1;
            if(startPage <= 0){
                startPage = 1;
            }
        }else{
            startPage = currentPage - mid + 1;
        }
        this.updateEndPage();
    }

    protected void updateEndPage(){
        int end = startPage + linkCount - 1;
        if(end < pageCount){
            endPage = end;
        }else{
            endPage = pageCount;
        }
    }

    /** Update PageHelper End **/

}

分页测试类: PageHelperUtil.java

package com.helper.unit;

import org.junit.Test;

import util.helper.PageHelper;

public class PageHelperUtil {

    private void output(PageHelper pageHelper){

        System.out.print("上一页:" + pageHelper.getPrevPage() +
                "  下一页:" + pageHelper.getNextPage() +
                "  起始下标:" + pageHelper.getBeginIndex());

        if(pageHelper.isHasPrevPage()){
            System.out.print("    有上一页: ");
        }else{
            System.out.print("    无上一页: ");
        }

        for(int i=pageHelper.getStartPage(); i<=pageHelper.getEndPage(); i++){
            if(pageHelper.getCurrentPage() == i){
                System.out.print(" *" + i + "*");
            }else{
                System.out.print(" " + i);
            }
        }

        if(pageHelper.isHasNextPage()){
            System.out.print("  :有下一页 ");
        }else{
            System.out.print("  :无下一页");
        }

        System.out.println("\n");
    }

    @Test
    public void test() {

        // 实例化一个每页显示10条记录,有5个链接按钮的分页工具
        PageHelper pageHelper = new PageHelper(10, 5);

        // 设置总记录数
        pageHelper.setRowCount(90);

        // 设置当前页
        pageHelper.setCurrentPage(1);
        output(pageHelper);

        // 设置当前页
        pageHelper.setCurrentPage(2);
        output(pageHelper);

        // 设置当前页
        pageHelper.setCurrentPage(3);
        output(pageHelper);

        // 设置当前页
        pageHelper.setCurrentPage(5);
        output(pageHelper);

        // 设置当前页
        pageHelper.setCurrentPage(7);
        output(pageHelper);

        // 设置当前页
        pageHelper.setCurrentPage(8);
        output(pageHelper);

        // 设置当前页
        pageHelper.setCurrentPage(9);
        output(pageHelper);

    }

}

测试结果:

上一页:1  下一页:2  起始下标:0    无上一页:  *1* 2 3 4 5  :有下一页 

上一页:1  下一页:3  起始下标:10    有上一页:  1 *2* 3 4 5  :有下一页 

上一页:2  下一页:4  起始下标:20    有上一页:  1 2 *3* 4 5  :有下一页 

上一页:4  下一页:6  起始下标:40    有上一页:  3 4 *5* 6 7  :有下一页 

上一页:6  下一页:8  起始下标:60    有上一页:  5 6 *7* 8 9  :有下一页 

上一页:7  下一页:9  起始下标:70    有上一页:  5 6 7 *8* 9  :有下一页 

上一页:8  下一页:9  起始下标:80    有上一页:  5 6 7 8 *9*  :无下一页
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章