Jsp+Mysql实现简单分页
Mysql分页
Mysql实现分页使用的是limit关键字,SQL查询语句”select * from student limit start ,size;",其中start表示索引开始(Mysql数据库索引默认从0开始),size表示要得到的数据条数,而不是索引结束。这里是每次从Jsp页面发送页码和页面大小交给Servlet处理然后从数据库查询数据封装到request中,然后交给Jsp进行渲染处理。
以下是数据库表"student"结构
DBUtill工具类
这里主要用于建立数据库连接和创建PrepareStatement对象,这两个方法不必关心,并且本身封装得不好,不必关心。主要关注getTotalCount用来获取"student"表中总数据条数,这个方法很重要。
StudentPaginationImpl
这是分页的核心DAO类,其中public List getStudentsPagination(int currentPage, int pageSize) 是实现分页的核心方法,会被service层调用。
QueryStudentsPaginationServlet
这是处理分页的Servlet
在这里插入代码片public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int currentPage =Integer.parseInt(request.getParameter("currentPage"));
int pageSize = Integer.parseInt(request.getParameter("pageSize"));
StudentPaginationService sp = new StudentPaginationServiceImpl();
List<Student> studentlist = sp.getStudentsPagination(currentPage, pageSize);
Page page = new Page();
int totalCount = sp.getTotalCount();
page.setTotalCount(totalCount);
page.setCurrentPage(currentPage);
page.setPageSize(pageSize);
page.setStudents(studentlist);
request.setAttribute("studentPage", page);
request.getRequestDispatcher("index.jsp").forward(request, response);
}
这里要注意Page类
Page page = new Page();
int totalCount = sp.getTotalCount();
page.setTotalCount(totalCount);
page.setCurrentPage(currentPage);
page.setPageSize(pageSize);
page.setStudents(studentlist);
因为前端会有这个东西
就需要Page类中的数据进行辅助,Page类包括5个字段,分别是当前页数、数据总条数、分页大小、总页数和每页需要的数据。总页数就需要数据总条数和分页大小进行计算,计算放在Page类中的setter方法处理了。
//当给出总数量和页面大小,页面数量会被自动计算
this.totalPage=this.totalCount %this.pageSize==0?this.totalCount /this.pageSize:(this.totalCount /this.pageSize)+1;
执行过程
加载index.jsp时,index会判断当前页面的request中是否有pageStudent对象,没有的话会转发到
QueryStudentsPaginationServlet进行查询数据,默认是第一页数据然后重定向到index页面,呈现如下图
这里注意这段代码
<%
if(pageStudent.getCurrentPage()==1) //首页显示下一页,尾页
{%>
<a href="QueryStudentsPaginaitonServlet?pageSize=10¤tPage=<%=pageStudent.getCurrentPage()+1%>">下一页</a>
<a href="QueryStudentsPaginaitonServlet?pageSize=10¤tPage=<%=pageStudent.getTotalPage()%>">尾页</a>
<%}
else if(pageStudent.getCurrentPage()==pageStudent.getTotalPage())//尾页 显示首页上一页
{
%>
<a href="QueryStudentsPaginaitonServlet?currentPage=1&pageSize=10">首页</a>
<a href="QueryStudentsPaginaitonServlet?pageSize=10¤tPage=<%=pageStudent.getCurrentPage()-1%>">上一页</a>
<% }
else{
%>
<a href="QueryStudentsPaginaitonServlet?currentPage=1pageSize=10">首页</a>
<a href="QueryStudentsPaginaitonServlet?pageSize=10¤tPage=<%=pageStudent.getCurrentPage()-1%>">上一页</a>
<a href="QueryStudentsPaginaitonServlet?pageSize=10¤tPage=<%=pageStudent.getCurrentPage()+1%>">下一页</a>
<a href="QueryStudentsPaginaitonServlet?pageSize=10¤tPage=<%=pageStudent.getTotalPage()%>">尾页</a>
<%} %>
当处在首页时,不会呈现上一页的按钮,同样处在尾页时不会呈现下一页的按钮,就需要判断一下。
相关链接
代码来自该视频教程
https://www.bilibili.com/video/BV18s411u7EH?from=search&seid=9610306124405179437&spm_id_from=333.337.0.0
完整代码
运行环境为MyEclipse,另外要修改DBUtil中的数据库连接参数
https://download.csdn.net/download/qq_43534244/45135883