All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.blade.jdbc.page.Page Maven / Gradle / Ivy

The newest version!
package com.blade.jdbc.page;

import lombok.Data;

import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * 分页对象封装
 *
 * @author biezhi
 * @date 2017/7/24
 */
@Data
public class Page {

    /**
     * 当前页
     */
    private int pageNum = 1;

    /**
     * 每页多少条
     */
    private int limit = 10;

    /**
     * 上一页
     */
    private int prevPage = 1;

    /**
     * 下一页
     */
    private int  nextPage   = 1;

    /**
     * 总页数
     */
    private int  totalPages = 1;

    /**
     * 总记录数
     */
    private long totalRows  = 0L;

    /**
     * 记录行
     */
    private List rows;

    /**
     * 是否为第一页
     */
    private boolean isFirstPage = false;

    /**
     * 是否为最后一页
     */
    private boolean isLastPage = false;

    /**
     * 是否有前一页
     */
    private boolean hasPrevPage = false;

    /**
     * 是否有下一页
     */
    private boolean hasNextPage = false;

    /**
     * 导航页码数
     */
    private int navPages = 8;

    /**
     * 所有导航页号
     */
    private int[] navPageNums;

    public  Page map(Function mapper) {
        Page page = new Page<>(this.totalRows, this.pageNum, this.limit);
        page.setRows(rows.stream().map(mapper).collect(Collectors.toList()));
        return page;
    }

    public Page() {
    }

    public Page(long total, int page, int limit) {
        init(total, page, limit);
    }

    private void init(long total, int pageNum, int limit) {
        //设置基本参数
        this.totalRows = total;
        this.limit = limit;
        this.totalPages = (int) ((this.totalRows - 1) / this.limit + 1);

        //根据输入可能错误的当前号码进行自动纠正
        if (pageNum < 1) {
            this.pageNum = 1;
        } else if (pageNum > this.totalPages) {
            this.pageNum = this.totalPages;
        } else {
            this.pageNum = pageNum;
        }

        //基本参数设定之后进行导航页面的计算
        this.calcNavigatePageNumbers();

        //以及页面边界的判定
        judgePageBoudary();
    }

    private void calcNavigatePageNumbers() {
        //当总页数小于或等于导航页码数时
        if (this.totalPages <= navPages) {
            navPageNums = new int[totalPages];
            for (int i = 0; i < totalPages; i++) {
                navPageNums[i] = i + 1;
            }
        } else {
            //当总页数大于导航页码数时
            navPageNums = new int[navPages];
            int startNum = pageNum - navPages / 2;
            int endNum   = pageNum + navPages / 2;
            if (startNum < 1) {
                startNum = 1;
                // 最前navPageCount页
                for (int i = 0; i < navPages; i++) {
                    navPageNums[i] = startNum++;
                }
            } else if (endNum > totalPages) {
                endNum = totalPages;
                //最后navPageCount页
                for (int i = navPages - 1; i >= 0; i--) {
                    navPageNums[i] = endNum--;
                }
            } else {
                //所有中间页
                for (int i = 0; i < navPages; i++) {
                    navPageNums[i] = startNum++;
                }
            }
        }
    }

    private void judgePageBoudary() {
        isFirstPage = pageNum == 1;
        isLastPage = pageNum == totalPages && pageNum != 1;
        hasPrevPage = pageNum != 1;
        hasNextPage = pageNum != totalPages;
        if (hasNextPage) {
            nextPage = pageNum + 1;
        }
        if (hasPrevPage) {
            prevPage = pageNum - 1;
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy