1. 程式人生 > >Web - 分頁查詢(limit).

Web - 分頁查詢(limit).

分頁查詢: 每頁顯示10條資料.在這裡插入圖片描述

Servlet.java

@WebServlet("/findByPage")
public class PageServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html; charset=utf-8");
        // 初始頁碼數為第一頁. 
        int pageNumber = 1;
        // 獲取帶過來的頁碼引數 .
        String pageNumber_str = request.getParameter("pageNumber");
        if(pageNumber_str!=null){
            pageNumber = Integer.parseInt(pageNumber_str);
        }
        // 每頁顯示的個數.
        int pageSize = 10;

        // 建立UserService物件 , 呼叫其方法.
        UserService us = new UserService();
        List<User> users = us.selectByPage(pageNumber,pageSize);

        // 獲取資料庫中總條數.
        int total = us.findTotal();
        int totalPage = (int) Math.ceil(total*1.0/pageSize);

        // 將資料放到域中.
        request.setAttribute("user",users);
        // 還需要將pageNumber 和 totalPage放在域中. 
        request.setAttribute("pageNumber",pageNumber);
        request.setAttribute("totalPage",totalPage);

        // i請求轉發到list2.jsp頁面.
        request.getRequestDispatcher("/list2.jsp").forward(request,response);
    }
}

UserDao.java

public class UserDao {
    // 分頁查詢 limit
    public List<User> selectByPage(int pageNumber, int pageSize) {
        // 建立QueryRunner物件.
        QueryRunner qr = new QueryRunner(DataSourceUtil.getDataSource());
        // 建立sql語句.
        String sql = "select * from user limit ?,? ";
        // 執行sql
        try {
            return qr.query(sql,new BeanListHandler<>(User.class),(pageNumber-1)*pageSize,pageSize);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    // 查詢資料庫中的總條數.
    public int findCount() {
        // 建立QueryRunner物件.
        QueryRunner qr = new QueryRunner(DataSourceUtil.getDataSource());
        // 建立sql語句.
        String sql = "select count(*) from user ";
        // 執行sql
        try {
            return ((Long)qr.query(sql,new ScalarHandler())).intValue();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

}

list2.jsp

<div class="text-center">
        <ul class="pagination pagination-lg">
            <%-- 如果時第一頁  --%>
            <c:if test="${pageNumber==1}">
                <li class="disabled">
                    <a href="#" aria-label="Previous">
                        <span aria-hidden="true">&laquo;</span>
                    </a>
                </li>
            </c:if>
            <%-- 不是第一頁. --%>
            <c:if test="${pageNumber!=1}">
                <li>
                    <a href="${ctx}/findByPage?pageNumber=${pageNumber-1}" aria-label="Previous">
                        <span aria-hidden="true">&laquo;</span>
                    </a>
                </li>
            </c:if>

            <c:forEach begin="1" end="${totalPage}" var="n">
                <%-- 是否是當前頁 --%>
                <c:if test="${n==pageNumber}">
                    <li class="active"><a href="javascript:;">${n}</a></li>
                </c:if>
                <%-- 不是當前頁 --%>
                <c:if test="${n!=pageNumber}">
                    <li><a href="${ctx}/findByPage?pageNumber=${n}">${n}</a></li>
                </c:if>
            </c:forEach>
            <%-- 如果是最後一頁  --%>
            <c:if test="${pageNumber==totalPage}">
                <li>
                    <a href="#" aria-label="Next">
                        <span aria-hidden="true">&raquo;</span>
                    </a>
                </li>
            </c:if>
            <%-- 不是最後一頁 點選的時候加1 --%>
            <c:if test="${pageNumber!=totalPage}">
                <li class="disabled">
                    <a href="${ctx}/findByPage?pageNumber=${pageNumber+1}" aria-label="Next">
                        <span aria-hidden="true">&raquo;</span>
                    </a>
                </li>
            </c:if>

        </ul>
    </div>