基于Java实现的简单且通用的分页实现封装 <Pagiation>

本文介绍了基于Java实现的分页组件,包括Pagination接口、BetweenIndex接口、DefaultPagination实现类、QueryHandler查询回调接口,以及在BookDaoImpl、BookServiceImpl、BookAction Servlet中的应用示例。示例中通过List集合模拟数据库,该分页组件适用于任何web项目,易于扩展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

博客搬家了, 新地址 [ http://wuwz.org ],是时候换上HEXO了

Pagination.java (interface)

定义了分页常用的属性,方法
包名:com.app.pagination;

package com.app.pagination;
import java.util.List;
/**
 * 通用分页接口
 * @author: wuwz@live.com
 * @ClassName: Pagination
 * @Version: v0.1
 * @param <T>
 */  
public interface Pagination<T> {
   
   
    /**
     * 判断是否是首页
     * @return
     */
    boolean isFirst();
    /**
     * 判断是否是尾页
     * @return
     */
    boolean isLast();
    /**
     * 判断是否有上一页
     * @return
     */
    boolean isPrevious();
    /**
     * 判断是否有下一页
     * @return
     */
    boolean isNext();


    /**
     * 获取上一页的页码
     * @return
     */
    int getPreviousIndex();
    /**
     * 获取下一页的页码
     * @return
     */
    int getNextIndex();
    /**
     * 获取当前页码
     * @return
     */
    int getPageIndex();
    /**
     * 获取当前页大小
     * @return
     */
    int getPageSize();
    /**
     * 获取总页数
     * @return
     */
    int getTotalPages();
    /**
     * 获取数据总行数
     * @return
     */
    int getTotalElements();

    /**
     * 获取当前页的数据
     * @return
     */
    List<T> getCurrData();

    /**
     * 获取数字分页链接对象
     * @return
     */
    BetweenIndex getBetweenIndex();

    /**
     * 获取每页显示的分页链接数
     * @return
     */
    int getPageLinkNumber();

    /**
     * 设置每页的分页链接数量
     * @param pageLinkNumber
     */
    void setPageLinkNumber(int pageLinkNumber);
}

BetweenIndex.java (interface)

该接口负责获取分页链接的开始和结尾索引
包名: com.app.pagination;

package com.app.pagination;
/**
 * 开始链接-结束链接
 * @author: wuwz@live.com
 * @ClassName: BetweenIndex
 * @Version: v0.1
 */
public interface BetweenIndex {
   
   
    /**
     * 获取开始分页链接索引
     * @return
     */
    int getBeginIndex();
    /**
     * 获取结束分页链接索引
     * @return
     */
    int getEndIndex();
}

DefaultPagination.java (implements Pagination)

Pagination接口的默认实现类
包名: com.app.pagination.impl;

package com.app.pagination.impl;
import java.util.List;
import com.app.pagination.BetweenIndex;
import com.app.pagination.Pagination;
/**
 * Pagination接口默认实现
 * @author: wuwz@live.com
 * @ClassName: DefaultPagination
 * @Version: v0.1
 * @param <T>
 */
public class DefaultPagination<T> implements Pagination<T> {
   
   
    private int totalElements;
    private int pageSize;
    private int totalPages;
    private int pageIndex;
    private QueryHandler<T> queryHandler;
    private List<T> currData;
    private int pageLinkNumber;

    public DefaultPagination(int pageIndex, int pageSize, QueryHandler<T> queryHandler, int pageLinkNumber) {
        this(pageIndex, pageSize, queryHandler);
        setPageLinkNumber(pageLinkNumber);
    }
    public DefaultPagination(int pageIndex, int pageSize, QueryHandler<T> queryHandler){
        //初始化数据访问回调接口
        this.queryHandler = queryHandler;
        //查询总行数
        setTotalElements();
        //修正页大小
        setPageSize(pageSize);
        //计算总页数:
        setTotalPages();
        //修正页码
        setPageIndex(pageIndex);
        //查询当前页数据
        setCurrData();
    }


    private void setCurrData() {

        this.currData = queryHandler.getCurrData(pageIndex, pageSize);
    }
    private void setPageIndex(int pageIndex) {

        if(pageIndex < 1) {
            this.pageIndex  = 1;
        } else if(pageIndex > totalPages) {
            this.pageIndex = totalPages;
        } else {
            this.pageIndex = pageIndex;
        }
    }
    private void setTotalPages() {

        if(pageSize > 0) {
            /*//普通算法: 
            this.totalPages = totalElements % pageSize == 0 ? 
                    totalElements / pageSize : (totalElements / pageSize) + 1;*/
            //减一公式:
            this.totalPages = (totalElements + pageSize - 1) / pageSize;
        }
    }
    private void setPageSize(int pageSize) {

        if(pageSize < 1) {
            this.pageSize = 1;
        } else if(pageSize > totalElements) {
            this.pageSize = totalElements;
        } else {
            this.pageSize = pageSize;
        }
    }
    private void setTotalElements() {

        this.totalElements = queryHandler.getTotalElements();
    }
    @Override
    public boolean isFirst() {

        return pageIndex == 1;
    }
    @Override
    public boolean isLast() {

        return pageIndex == totalPages;
    }
    @Override
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值