1. 程式人生 > 實用技巧 >jsp mysql 實現客戶端簡單分頁查詢

jsp mysql 實現客戶端簡單分頁查詢

jsp mysql 實現客戶端簡單分頁查詢

 

dao.impl


import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import sim.dao.StudentDao;
import sim.entity.Student;

import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.List;

public class StudentDaoImpl implements StudentDao {
    private DataSource ds = new ComboPooledDataSource();
    private QueryRunner qr = new QueryRunner(ds);  // 必有的兩句

    @Override
    public List<Student> selectAll(Integer currentPageNo, Integer pageSize) {
        List<Student>  studentList = null;
        try {
            String sql  ="select *  from  user  limit ?,?";
            Object[] objects={(currentPageNo-1)*pageSize,pageSize};  //頁面數量,頁面大小
            studentList = qr.query(sql,new BeanListHandler<Student>(Student.class),objects);  //很多地方少寫了 r currentPageNo
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return studentList;
    }


    @Override
    public Integer selectCount() {
        Long count = null;
        try {
            String sql ="select count(1) from  user";   //把 Long 寫成 long
            count = (Long) qr.query(sql,new ScalarHandler());  //總頁數
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return Integer.parseInt(count+"");
    }
}

 

StudentServiceImpl


import sim.dao.StudentDao;
import sim.dao.StudentDaoImpl.StudentDaoImpl;
import sim.entity.Student;
import sim.service.StudentService;

import java.util.List;

public class StudentServiceImpl implements StudentService {
    private StudentDao studentDao  = new StudentDaoImpl();  //必有的例項
    @Override
    public List<Student> selectAll(Integer currentPageNo, Integer pageSize) {   //
        return studentDao.selectAll(currentPageNo,pageSize);
    }

    @Override
    public Integer selectCount() {
        return studentDao.selectCount();
    }
}

 

servlet


import sim.Utils.PageUtils;
import sim.entity.Student;
import sim.service.StudentService;
import sim.service.StudentServiceImpl.StudentServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

@WebServlet(name = "studentServlet" ,urlPatterns = "/studentServlet")
public class StudentServlet extends HttpServlet {
    private StudentService studentService;  //一定有的一句

    @Override
    public void init() throws ServletException {
        studentService = new StudentServiceImpl();   //一定有的一句
    }

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String currentPageNoStr = req.getParameter("currentPageNo");  //本頁的當前頁量
        Integer currentPageNo = null;
        if(currentPageNoStr ==null || currentPageNoStr==""){
            currentPageNo = 1;
        }else{
            currentPageNo =Integer.parseInt(currentPageNoStr);
        }

        String pageSizeStr = req.getParameter("pageSize");  //當前頁量數
        Integer pageSize=null;
        if(pageSizeStr ==null || pageSizeStr==""){
            pageSize = 2;  //無頁量,則為2
        }else{
            pageSize =Integer.parseInt(pageSizeStr);  //有頁量,則傳遞
        }

        Integer totalPageCount = studentService.selectCount();
        Integer totalPageSize =  totalPageCount  % pageSize ==0 ? totalPageCount / pageSize  //為什麼等於0————因為把 % 打成了 /
                : totalPageCount / pageSize +1;
        List<Student> studentList = studentService.selectAll(currentPageNo,pageSize);
        PageUtils<Student> pageUtils = new PageUtils<>();  //資料庫的名字和實體類不同,導致錯誤。
        pageUtils.setCurrentPageNo(currentPageNo);
        pageUtils.setPageSize(pageSize);
        pageUtils.setTotalPageCount(totalPageCount);
        pageUtils.setTotalPageSize(totalPageSize);
        pageUtils.setList(studentList);
        req.setAttribute("pageUtils",pageUtils);
        req.getRequestDispatcher("index.jsp").forward(req,resp);
    }
}

 

index.jsp


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
  <head>
    <title>分頁</title>
    <script src="${pageContext.request.contextPath}/js/jquery-1.8.3.js"></script>
  </head>
  <body>

<%--  重定向,載入兩次頁面(跳過第一次無資料)--%>
<%      Object object = request.getAttribute("pageUtils");
        if (object==null){
          request.getRequestDispatcher("studentServlet").forward(request,response);
        }
%>


  <table border="1" width="700px" align="center">
    <tr>
      <td>編號</td>
      <td>名字</td>
      <td>年齡</td>
    </tr>
    <c:forEach items="${pageUtils.list}" var="student">
      <tr>
        <td>${student.uid}</td>
        <td>${student.uname}</td>
        <td>${student.uage}</td>
      </tr>
    </c:forEach>

    </table>

  <div style="margin-left: 320px">
    <a href="${pageContext.request.contextPath}/studentServlet?currentPageNo=1">首頁</a>
<c:if test="${pageUtils.currentPageNo>1}">
    <a href="${pageContext.request.contextPath}/studentServlet?currentPageNo=${pageUtils.currentPageNo-1}">上一頁</a>
</c:if>
<c:if test="${pageUtils.currentPageNo < pageUtils.totalPageSize}">  <%--中間的小於,是在大括號內--%>
    <a href="${pageContext.request.contextPath}/studentServlet?currentPageNo=${pageUtils.currentPageNo+1}">下一頁</a>
</c:if>
    <a href="${pageContext.request.contextPath}/studentServlet?currentPageNo=${pageUtils.totalPageSize}">末頁</a>
    <span>共有${pageUtils.totalPageCount}條</span>
    <span>${pageUtils.currentPageNo}頁/${pageUtils.totalPageSize}頁</span>
    <input type="text" id="tv_count" style="width: 40px"><input type="button" value="go" id="tv_but">
  </div>
  <script>
    $("#tv_but").click(function () {
      var currentPageNo = $("#tv_count").val(); /* 獲取 input 標籤框的內容*/
      window.location.href = "${pageContext.request.contextPath}/studentServlet?currentPageNo="+currentPageNo;
    })

  </script>
  </body>
</html>

 

StudentDao (實現;定義)

 

Student (實現;三個變數;兩構造;set get;toString)

 

PageUtils (五個變數;兩構造;set get;toString)

 

結果展示:

首頁

第四頁

跳轉成功