溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

javaweb是如何編寫分頁mysql的

發(fā)布時間:2020-06-02 14:22:39 來源:網(wǎng)絡(luò) 閱讀:251 作者:三月 欄目:開發(fā)技術(shù)

本文主要給大家簡單講講javaweb是如何編寫分頁mysql的,相關(guān)專業(yè)術(shù)語大家可以上網(wǎng)查查或者找一些相關(guān)書籍補(bǔ)充一下,這里就不涉獵了,我們就直奔主題吧,希望javaweb是如何編寫分頁mysql的這篇文章可以給大家?guī)硪恍嶋H幫助。

1.封裝PageBean

import java.util.List;

/**
 * 分頁的JavaBean
 * @author Administrator
 */
public class PageBean<T> {

    // 當(dāng)前頁
    private int pageCode;

    // 總頁數(shù)
    // private int totalPage;

    // 總記錄數(shù)
    private int totalCount;
    // 每頁顯示的記錄條數(shù)
    private int pageSize;
    // 每頁顯示的數(shù)據(jù)
    private List<T> beanList;

    public int getPageCode() {
        return pageCode;
    }
    public void setPageCode(int pageCode) {
        this.pageCode = pageCode;
    }

    /**
     * 調(diào)用getTotalPage() 獲取到總頁數(shù)
     * JavaBean的屬性規(guī)定:totalPage是JavaBean是屬性 ${pageBean.totalPage}
     * @return
     */
    public int getTotalPage() {
        // 計算
        int totalPage = totalCount / pageSize;
        // 說明整除
        if(totalCount % pageSize == 0){
            return totalPage;
        }else{
            return totalPage + 1;
        }
    }

    /*public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }*/

    public int getTotalCount() {
        return totalCount;
    }
    public void setTotalCount(int totalCount) {
        this.totalCount = totalCount;
    }
    public int getPageSize() {
        return pageSize;
    }
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
    public List<T> getBeanList() {
        return beanList;
    }
    public void setBeanList(List<T> beanList) {
        this.beanList = beanList;
    }
}

2.Servlet

/**
     * 獲取當(dāng)前頁
     *如果用戶沒有傳,默認(rèn)是第一頁,如果傳了,就是幾
     * @param request
     * @return
     */
    public int getPageCode(HttpServletRequest request){
        String pc = request.getParameter("pc");
        // 判斷
        if(pc == null || pc.trim().isEmpty()){
            return 1;
        }
        return Integer.parseInt(pc);
    }
/**
     * 分頁查詢
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /**
         * 處理當(dāng)前頁
         * 處理每頁顯示的記錄條數(shù)
         */
        // 當(dāng)前頁
        int pageCode = getPageCode(request);
        // 處理每頁顯示的記錄條數(shù)
        int pageSize = 4;
        try {
            // 調(diào)用業(yè)務(wù)層,分頁查詢
            PageBean<Product> page = new ProductService().findByPage(pageCode,pageSize);
            // 存入
            request.setAttribute("page", page);
            // 轉(zhuǎn)發(fā)
            request.getRequestDispatcher("/jsp/pages.jsp").forward(request, response);

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

3.service

/**
     * 分頁查詢
     * @param pageCode
     * @param pageSize
     * @return
     * @throws SQLException 
     */
    public PageBean<Product> findByPage(int pageCode, int pageSize) throws SQLException {
        return new ProductDao().findByPage(pageCode,pageSize);
    }

4.dao

/**
     * 分頁查詢
     * 
     * @param pageCode
     * @param pageSize
     * @return
     * @throws SQLException 
     */
    public PageBean<Product> findByPage(int pageCode, int pageSize) throws SQLException {
        PageBean<Product> page = new PageBean<>();
        // 屬性是空的
        page.setPageCode(pageCode);
        page.setPageSize(pageSize);

        QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
        // ScalarHandler 處理聚合函數(shù)
        long count = (long) qr.query("select count(*) from product", new ScalarHandler());
        // 設(shè)置總記錄條數(shù)
        page.setTotalCount((int) count);

        // limit a,b a = (當(dāng)前頁-1) * b
        List<Product> beanList = qr.query("select * from product limit ?,?", new BeanListHandler<Product>(Product.class),
                (pageCode - 1) * pageSize, pageSize);

        // 每頁顯示的數(shù)據(jù)
        page.setBeanList(beanList);

        return page;
    }

5.utils

public class JdbcUtils {

    // 成員變量,創(chuàng)建了C3P0的連接池(連接池中已經(jīng)存在連接了...)
    private static final ComboPooledDataSource DATASOURCE = new ComboPooledDataSource();

    /**
     * 返回的是C3P0的連接池
     * @return
     */
    public static DataSource getDataSource(){
        return DATASOURCE;
    }

    /**
     * 獲取連接,返回連接
     * @return
     */
    public static Connection getConnection(){
        Connection conn = null;
        try {
            // 從連接池中來獲取連接,conn 是增強(qiáng)過的連接
            conn = DATASOURCE.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }

    /**
     * 釋放資源
     * @param stmt
     * @param conn
     */
    public static void release(Statement stmt,Connection conn){
        if(stmt != null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn != null){
            try {
                // 已經(jīng)變成了歸還了...
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 釋放資源
     * @param stmt
     * @param conn
     */
    public static void release(ResultSet rs,Statement stmt,Connection conn){
        if(rs != null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(stmt != null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn != null){
            try {
                // 把close()給修改了,原來是銷毀連接,現(xiàn)在讓方法變成歸還連接。
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}

6.jsp頁面

<table border="1" width="100%">
    <tr>
        <th>序號</th>
        <th>圖片</th>
        <th>名稱</th>
        <th>市場價格</th>
        <th>商城價格</th>
        <th>商品日期</th>
    </tr>

    <c:forEach var="p" items="${ page.beanList }" varStatus="vs">
        <tr align="center">
            <td>${ vs.count }</td>
            <td>
                <img src="${ pageContext.request.contextPath }/${p.pimage}" width="100px" height="100px">
            </td>
            <td>${ p.pname }</td>
            <td>${ p.market_price }</td>
            <td>${ p.shop_price }</td>
            <td>${ p.pdate }</td>
        </tr>
    </c:forEach>

    分頁條 
    <tr>
        <th colspan="6">
            第${ page.pageCode }頁/共${ page.totalPage }頁
            <a href="${ pageContext.request.contextPath }/findByPage?pc=1">首頁</a>
            <c:if test="${ page.pageCode > 1 }">
                <a href="${ pageContext.request.contextPath }/findByPage?pc=${page.pageCode - 1}">上一頁</a>
            </c:if>

                begin和end值是變化的,設(shè)置begin和end的值
                邏輯:
                    * 如果總頁數(shù)<=10頁,讓begin=1 end=總頁數(shù)
                    * 如果總頁數(shù) > 10頁,begin=當(dāng)前頁-5 ,end = 當(dāng)前頁 + 4
                        * 頭溢出:如果begin<1,出現(xiàn)了頭溢出了,讓begin=1 end=10
                        * 尾溢出:如果end > 總頁數(shù),讓begin=總頁數(shù)-9 end=總頁數(shù)

            <c:choose>
                <c:when test="${ page.totalPage <= 10 }">
                    <c:set var="begin" value="1"/>
                    <c:set var="end" value="${ page.totalPage }"/>
                </c:when>
                <c:otherwise>
                    <c:set var="begin" value="${ page.pageCode - 5 }"/>
                    <c:set var="end" value="${ page.pageCode + 4 }"/>
                頭溢出的問題 
                    <c:if test="${ begin < 1 }">
                        <c:set var="begin" value="1"/>
                        <c:set var="end" value="10"/>
                    </c:if>

                    <c:if test="${ end > page.totalPage }">
                        <c:set var="begin" value="${ page.totalPage - 9 }"/>
                        <c:set var="end" value="${ page.totalPage }"/>
                    </c:if>
                </c:otherwise>
            </c:choose>

            <c:forEach var="i" begin="${ begin }" end="${ end }">
                <a href="${ pageContext.request.contextPath }/findByPage?pc=${i}">[${ i }]</a>
            </c:forEach>

            <c:if test="${ page.pageCode < page.totalPage }">
                <a href="${ pageContext.request.contextPath }/findByPage?pc=${page.pageCode + 1}">下一頁</a>
            </c:if>
            <a href="${ pageContext.request.contextPath }/findByPage?pc=${page.totalPage}">尾頁</a>
        </th>
    </tr>

</table>

javaweb是如何編寫分頁mysql的就先給大家講到這里,對于其它相關(guān)問題大家想要了解的可以持續(xù)關(guān)注我們的行業(yè)資訊。我們的板塊內(nèi)容每天都會捕捉一些行業(yè)新聞及專業(yè)知識分享給大家的。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI