實現網頁分頁顯示

如何實現分頁顯示

使用 JSP+TOMCAT+SQLSERVER

完成效果爲,分頁
這裏寫圖片描述

  1. 建立頁面信息對象
    包括結果集,記錄數,每頁多少條數據,第幾頁,總頁數,首頁,前一頁,下一頁,尾頁
package com.houlu.drp;

import java.util.List;

/**
 * 分頁信息類
 * @author Administrator
 * @param <T>
 *
 */
public class PageModel<T> {

    //結果集
    private List<T> list;

    //記錄數
    private int totalRecords;

    //每頁多少條數據
    private int pageSize;

    //第幾頁
    private int pageNo;

    //總頁數
    private int totalPages;

    //首頁
    private int topPageNo = 1;

    //前一頁
    private int previousPageNo;

    //下一頁
    private int nextPageNo;

    //尾頁
    private int buttomPageNo;

    public List<T> getList() {
        return list;
    }

    public void setList(List<T> list) {
        this.list = list;
    }

    public int getTotalRecords() {
        return totalRecords;
    }

    public void setTotalRecords(int totalRecords) {
        this.totalRecords = totalRecords;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public int getPageNo() {
        return pageNo;
    }

    public void setPageNo(int pageNo) {
        this.pageNo = pageNo;
    }

    /**
     * 取得總頁數
     * @return
     */
    public int getTotalPages() {
        return (totalRecords + pageSize - 1) / pageSize;
    }

    /**
     * 首頁
     * @return
     */
    public int getTopPageNo() {
        return topPageNo;
    }

    /**
     * 前一頁
     * @return
     */
    public int getPreviousPageNo() {
        if (this.pageNo <= 1) {
            return 1;
        }
        return this.pageNo - 1;
    }

    /**
     * 後一頁
     * @return
     */
    public int getNextPageNo() {
        if(this.pageNo >= totalPages){
            return topPageNo;
        }
        return this.pageNo + 1;
    }

    /**
     * 尾頁
     * @return
     */
    public int getButtomPageNo() {
        return getTotalPages();
    }
}

2.使用JAVA查找數據庫表,計算頁信息,利用rowNumber()以及子查詢的方法實現分頁查詢

use DRPManagement
select * from(
    select row_number() over(order by user_id asc) as r2,* from 
        (
            select row_number() over(order by user_id asc) as r1,* from T_USER where USER_ID not in('root')
        )t1 where t1.r1<=3 
)t2 where t2.r2>0 

/**
     * 分頁查詢
     * @param pageNo    第幾頁
     * @param pageSize  每頁多少條數據
     * @return  pageMode
     */
    public PageModel findUserList(int pageNo,int pageSize){
        //拼串創建SQL
        StringBuffer sb = new StringBuffer();
        sb.append("select * from(");
        sb.append("select row_number() over(order by user_id asc) as r2,* from ");
        sb.append("(");
        sb.append("select row_number() over(order by user_id asc) as r1,* from T_USER where USER_ID not in('root')");
        sb.append(")t1 where t1.r1<= ?");
        sb.append(")t2 where t2.r2> ?");

        String sql = new String(sb);

        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        PageModel pageModel = null;
        try {
            conn = DbUtil.getConnection();  
            pstmt = conn.prepareStatement(sql); 
            pstmt.setInt(1, pageNo*pageSize);
            pstmt.setInt(2,(pageNo-1)*pageSize);

            rs = pstmt.executeQuery();  
            List<User> userList = new ArrayList<User>();
            while(rs.next()){
                User user = new User();
                user.setUserId(rs.getString("user_id"));
                user.setUserName(rs.getString("user_name"));
                user.setPassword(rs.getString("password"));
                user.setContactTel(rs.getString("contact_tel"));
                user.setEmail(rs.getString("email"));
                user.setCreateDate(rs.getTimestamp("create_date"));
                userList.add(user);
            }

            pageModel = new PageModel();
            pageModel.setList(userList);
            pageModel.setTotalRecords(getTotalRecords(conn));

            pageModel.setPageSize(pageSize);
            pageModel.setPageNo(pageNo);

        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            DbUtil.close(rs);
            DbUtil.close(pstmt);
            DbUtil.close(conn);
        }
        return pageModel;
    }

    /**
     * 獲取總記錄數
     * @param conn
     * @return
     * @throws SQLException
     */
    private int getTotalRecords(Connection conn)throws SQLException{
        String sql = "select count(*) from t_user where user_id not in('root')";
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        int count=0;
        try {
            pstmt = conn.prepareStatement(sql);
            rs = pstmt.executeQuery();
            rs.next();
            count=rs.getInt(1);
        } finally{
            DbUtil.close(rs);
            DbUtil.close(pstmt);
        }
        return count;
    }

此時pageMode對象保存有多個user對象,即每一頁查詢結果

3.使用JSP輸出

設置頁面大小以及第幾頁

<%
    int pageNo = 1;
    int pageSize = 2;
    PageModel pageMode = UserManager.getInstance().findUserList(pageNo, pageSize);  
%>

遍歷pagemode中的user對象,輸出至頁面

    <% 
                    List userList = pageMode.getList();
                    for(Iterator it = userList.iterator();it.hasNext();){
                        User user = (User)it.next();

                %>
                <tr>
                    <td class="rd8">
                        <input type="checkbox" name="selectFlag" class="checkbox1"
                            value="<%=user.getUserId()%>">
                    </td>
                    <td class="rd8">
                        <%=user.getUserId()%>
                    </td>
                    <td class="rd8">
                        <%=user.getUserName()%>
                    </td>
                    <td class="rd8">
                        <%=user.getContactTel()%>
                    </td>
                    <td class="rd8">
                        <%=user.getEmail()%>
                    </td>
                    <td class="rd8">
                        <%=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getCreateDate())%>
                    </td>
                </tr>

                <% 
                    } 
                %>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章