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*  :無下一頁
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章