JavaWeb+MySql分页封装


前段时间因为需要所以写一个JavaWeb+MySql的分页封装类,附上代码。技术有限写得不好请多多指教。

1.首先贴上Eneity类

package com.zx.pageUtil;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 *  分页工具类 
 * @author zhangxiang
 * 
 */
public class Pager implements Serializable {
    private static final long serialVersionUID = 4542617637761955078L;

    /**
     * currentPage 当前页
     */
    private int currentPage = 1;
    /**
     * pageSize 每页大小
     */
    private int pageSize = 5;
    /**
     * pageTotal 总页数
     */
    private int pageTotal;
    /**
     * recordTotal 总条数
     */
    private int recordTotal = 0;
    /**
     * previousPage 前一页
     */
    private int previousPage;
    /**
     * nextPage 下一页
     */
    private int nextPage;
    /**
     * firstPage 第一页
     */
    private int firstPage = 1;
    /**
     * lastPage 最后一页
     */
    private int lastPage;
    /**
     * 页号式导航, 起始页号
     */
    private int startPage;
    /**
     * 页号式导航, 结束页号
     */
    private int endPage;
    /**
     * 页号式导航, 最多显示页号数量为numCount+1;这里显示11页。
     */
    private int numCount = 10;
    /**
     * 要显示的页号
     */
    public List showPagesNum = new ArrayList();
    
    // 以下set方式是需要赋值的 不需要全部生成set 
    /**
     * 设置当前页 
*
@param currentPage */ public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } /** * 设置每页大小,也可以不用赋值,默认大小为10条
*
@param pageSize */ public void setPageSize(int pageSize) { this.pageSize = pageSize; } /** * 设置总条数,默认为0
*
@param recordTotal */ public void setRecordTotal(int recordTotal) { this.recordTotal = recordTotal; otherAttr(); } /** * 设置其他参数 */ public void otherAttr() { // 总页数 this.pageTotal = this.recordTotal % this.pageSize > 0 ? this.recordTotal / this.pageSize + 1 : this.recordTotal / this.pageSize; // 第一页 this.firstPage = 1; // 最后一页 this.lastPage = this.pageTotal; // 前一页 if (this.currentPage > 1) { this.previousPage = this.currentPage - 1; } else { this.previousPage = this.firstPage; } // 下一页 if (this.currentPage < this.lastPage) { this.nextPage = this.currentPage + 1; } else { this.nextPage = this.lastPage; } // 计算page 控制 /** 计算数字翻页起始数字从哪一个开始 ,因为我们默认的是需要显示10个翻页数字(加上本页等于11页) startPage是起始翻页数字,所以需要个根据本页向前显示5个翻页数字 例如本页是 6 那么就是 1 2 3 4 5 6(本页) 同时需要判断是不是第一页,第一页不需要向前显示翻页数字。 this.currentPage - numCount / 2 只要本页不大于6 它的数字翻页始终从1开始,7就从2开始 8就从3开始 以此类推 */ startPage = Math.max(this.currentPage - numCount / 2, firstPage); endPage = Math.min(startPage + numCount, lastPage); /** 查看所有的数字翻页是否大于设置的默认数字翻页个数 如果不大于 那就说明总的页数小于默认设置要显示的数字翻页的个数或者等于 那么就从第1页的数字翻页开始显示 一直到总的页数 */ if (endPage - startPage < numCount) { startPage = Math.max(endPage - numCount, 1); } /** 编写数字翻页集合利于页面迭代取出相应的数字翻页。 */ for(int i = startPage; i <= endPage; i++){ showPagesNum.add(i); } } // 放开私有属性 public int getCurrentPage() { return currentPage; } public int getPageSize() { return pageSize; } public int getPageTotal() { return pageTotal; } public int getRecordTotal() { return recordTotal; } public int getPreviousPage() { return previousPage; } public int getNextPage() { return nextPage; } public int getFirstPage() { return firstPage; } public int getLastPage() { return lastPage; } public int getStartPage() { return startPage; } public int getEndPage() { return endPage; } public int getNumCount() { return numCount; } public List getShowPagesNum() { return showPagesNum; } @Override public String toString() { return "Pager [currentPage=" + currentPage + ", pageSize=" + pageSize + ", pageTotal=" + pageTotal + ", recordTotal=" + recordTotal + ", previousPage=" + previousPage + ", nextPage=" + nextPage + ", firstPage=" + firstPage + ", lastPage=" + lastPage + ", startPage=" + startPage + ", endPage=" + endPage + "]"; } }

2.与数据库交互代码,我这边用的是Spring JDBC。注意一下这里只是部分代码,相信贴出这段代码你就知道如何做

@Override
public List getUserList(Pager pager) {
    String sql = "select * from user limit ?,?  ";
    this.getJdbcTemplate().query(sql,new Object[] {(pager.getCurrentPage()*pager.getPageSize()-pager.getPageSize()),pager.getPageSize()});
    return null;
}

3.jsp代码选择翻页导航代码,由于样式中含有背景图,所以没有办法给到

<div class="member-pages clearfix">
    <div class="fr pc-search-g" >
        <c:if test="${pager.currentPage >1 }">
            <a href="addressView?currentPage=${pager.previousPage }" class="pc-search-n" >上一页a>
        c:if>
        <c:forEach  items="${pager.showPagesNum}" var="showPages">
            <a href="addressView?currentPage=${showPages }" ="${pager.currentPage ==  showPages}">class="current"c:if>>${showPages }a>
        c:forEach>
        <c:if test="${pager.currentPage < pager.pageTotal }">
            <span class="pc-search-di">span>
            <a href="addressView?currentPage=${pager.nextPage }" class="pc-search-n" >下一页a>
        c:if>
        <form action="addressView" id="subform" method="post" style="display:inline;">
            <span class="pc-search-y">
                <em>  共${pager.pageTotal }页    到第em>
                <input type="text" name="currentPage" placeholder="${pager.currentPage }" class="pc-search-j">
                <em>em>
                <a class="confirm" href="javascript:;" onclick="document.getElementById('subform').submit();return false">确定a>
            span>
        form>
    div>
div>

最后这里贴上效果图:

图1

图2