java分页技术

xiaoxiao2021-02-28  111

在实际项目中,经常要用到很多分页技术,特别是数据量比较大的时候,为了直观便捷的展示出数据,而不是在一个页面上把所有数据全部展现出来(会显得很冗余,页面繁重,并且不好看),所以用分页技术比较好。

我们可以利用mysql数据库里面的limit来限制显示的数据,从而达到分页。同样也可以用oracle里面的rownum来限制,也可以用到mybatis中自带的RowBounds分页技术

本文的页面是使用jsp页面(没有过多考虑页面,注重分页的实现),没有使用框架,使用了Java开发中的三层架构(web,service,dao),并且使用JDBC技术来处理数据库,从而达到分页的效果

首先需要的是两个bean类  一个Student类  用来封装Student对象 一个page类 里面包含了页面中的一些属性(比如 当前页码 每页的大小等等)

Student.java

package page.bean; import java.io.Serializable; /** * 普通的学生bean类 * @author liujd * */ public class Student implements Serializable{ private static final long serialVersionUID = 6724577147867445725L; private Integer id; private String name; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name == null ? null : name.trim(); } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + ", age=" + age + "]"; } }

Page.java

package page.bean; import java.io.Serializable; /** * 首先定义一个分页的bean类 * 用来存储和分页有关的属性 * @author liujd * */ public class Page implements Serializable{ private static final long serialVersionUID = 2024980639990498085L; //当前页 就是当前是在第多少页 private Integer pageNow; //需要分页的数据总数 private Integer total; //每页多少条数据 private Integer pageSize; //一共有多少页 private Integer pageTotal; //每页数据开始条数 private Integer pageBegin; //每页数据结束条数 private Integer pageEnd; public Integer getPageNow() { return pageNow; } public void setPageNow(Integer pageNow,Integer total, Integer pageSize) { this.total = total; this.pageSize = pageSize; this.pageNow = pageNow; this.pageTotal = total % pageSize == 0 ? total/pageSize : total/pageSize +1; this.pageBegin = (pageNow-1) * pageSize; this.pageEnd = pageNow * pageSize; } public Integer getTotal() { return total; } public void setTotal(Integer total) { this.total = total; } public Integer getPageSize() { return pageSize; } public void setPageSize(Integer pageSize) { this.pageSize = pageSize; } public Integer getPageTotal() { return pageTotal; } public void setPageTotal(Integer pageTotal) { this.pageTotal = pageTotal; } public Integer getPageBegin() { return pageBegin; } public void setPageBegin(Integer pageBegin) { this.pageBegin = pageBegin; } public Integer getPageEnd() { return pageEnd; } public void setPageEnd(Integer pageEnd) { this.pageEnd = pageEnd; } }然后是一个Servlet  用来接收前台页面中的关于页面的信息  并且返回查询到的学生列表以及处理后的有关Page的信息

StudentServlet.java

package page.web; import java.io.IOException; import java.util.List; 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 javax.servlet.http.HttpSession; import page.bean.Page; import page.bean.Student; import page.service.StudentService; @WebServlet("/listStudent") public class StudentServlet extends HttpServlet { private static final long serialVersionUID = 1L; StudentService service = new StudentService(); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String pageNowString = request.getParameter("pageNow"); String pageSizeString = request.getParameter("pageSize"); int pageNow = Integer.parseInt(pageNowString); int total = service.getStudentCount(); int pageSize = Integer.parseInt(pageSizeString); Page page = new Page(); page.setPageNow(pageNow, total, pageSize); List<Student> list = service.getStudentList(page); request.setAttribute("list", list); request.setAttribute("pageNow", page.getPageNow()); request.setAttribute("total", total); request.getRequestDispatcher("studentList.jsp").forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }service层用来调用dao层的方法

package page.service; import java.util.List; import page.bean.Page; import page.bean.Student; import page.dao.StudentDao; /** * service层方法 * @author liujd * */ public class StudentService { //获取Dao层对象 StudentDao dao = new StudentDao(); /** * 获取学生列表 * @param page * @return */ public List<Student> getStudentList(Page page) { return dao.getStudentList(page); } /** * 获取学生总数 * @return */ public int getStudentCount() { return dao.getStudentCount(); } }最后是与数据库进行交互的dao层 使用的是JDBC技术

特别要注意的是里头limit的用法

limit m,n 其中m表示偏移量  就是从哪条信息开始查  n表示从偏移量开始要查多少条  

有关limit的使用详情请见http://blog.csdn.net/liujiding/article/details/74939944

StudentDao.java

package page.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import page.bean.Page; import page.bean.Student; /** * dao层方法 * @author liujd * */ public class StudentDao { /** * 从数据库里面来获取学生列表 * @param page * @return */ public List<Student> getStudentList(Page page) { PreparedStatement statement = null; Connection connection = null; List<Student> list = null; try { connection = getConnection(); //获取preparedStatement对象 statement = connection.prepareStatement("select * from student limit ?,?"); //设置值 statement.setInt(1, page.getPageBegin()); //这里第二个参数设置为pageSize的原因: //mysql中limit的用法 第一个参数是偏移量 也就是从哪个位置开始查询 第二个参数不是结束位置 而是从偏移量开始要查询的长度 statement.setInt(2, page.getPageSize()); //得到结果集 ResultSet result = statement.executeQuery(); //声明一个Student对象 以及 一个List集合 用来封装结果 list = new ArrayList<Student>(); //遍历结果集 并且封装成Student对象 添加到List集合中 while(result.next()){ Student student = new Student(); student.setId(result.getInt(1)); student.setName(result.getString(2)); student.setAge(result.getInt(3)); list.add(student); } return list; } catch (SQLException e) { e.printStackTrace(); return null; }finally{ //记得关流!!! if(statement != null){ try { statement.close(); } catch (SQLException e) { e.printStackTrace(); } } if(connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } } /** * 获取学生总数 * @return */ public int getStudentCount(){ Connection connection = getConnection(); try { PreparedStatement statement = connection.prepareStatement("select count(1) from student"); ResultSet resultSet = statement.executeQuery(); int result = 0; while(resultSet.next()) { result = resultSet.getInt(1); } return result; } catch (SQLException e) { e.printStackTrace(); return 0; } } /** * 建立数据库连接并且获取数据 * @return */ private Connection getConnection() { //1.加载驱动 这里用的mysql try { Class.forName("com.mysql.jdbc.Driver"); //获取连接对象 return DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "liujd", "1234"); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); return null; } } }studentList.jsp

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>student——list</title> <script type="text/javascript"> /* window.onload = function(){ var pageSize = document.getElementById("pageSize").value; location.href="listStudent?pageNow=1&pageSize="+pageSize; } */ function changePage(){ var change = document.getElementById("changePage").value; var pageSize = document.getElementById("pageSize").value; if(change <1){ change = 1; alert("不能调到小于1页"); } var total = document.getElementById("total").innerHTML; var pageSize = document.getElementById("pageSize").value; var total = Number(total); var pageSize = Number(pageSize); var result = total%pageSize == 0 ? (total/pageSize) : (Math.floor(total/pageSize)+1); if(change > result) { change = result; alert("不能调到大于最后一页"); } location="listStudent?pageNow="+change+"&pageSize="+pageSize; } function getForword() { var pageNow = document.getElementById("pageNow").innerHTML; var pageForword = Number(pageNow)-1; if(pageForword <1){ pageForword = 1; alert("当前页是最前页"); } console.log(pageForword); var pageSize = document.getElementById("pageSize").value; location="listStudent?pageNow="+pageForword+"&pageSize="+pageSize; } function getNext() { var pageNow = document.getElementById("pageNow").innerHTML; var total = document.getElementById("total").innerHTML; var pageSize = document.getElementById("pageSize").value; var pageNext = Number(pageNow)+1; var total = Number(total); var pageSize = Number(pageSize); console.log(total); console.log(pageSize); var result = total%pageSize == 0 ? (total/pageSize) : (Math.floor(total/pageSize)+1); if(pageNext > result) { pageNext = result; alert("当前页是最后一页"); } location="listStudent?pageNow="+pageNext+"&pageSize="+pageSize; } </script> </head> <body> <center> <h3>学生列表</h3> <table align="center" bgcolor="gray" border="1" bordercolor="#666699" cellspacing="0"> <tr height="30" align="center"> <td width="100" >id</td> <td width="100" >姓名</td> <td width="100" >年龄</td> </tr> <c:forEach items="${list}" var="stu"> <tr height="30" align="center"> <td width="100" background="red">${stu.id}</td> <td width="100" >${stu.name}</td> <td width="100" >${stu.age}</td> </tr> </c:forEach> </table> <span><input type="text" value="1" style="width: 15px" id="changePage" />页 <button οnclick="changePage()">跳转</button>  </span> <button οnclick="getForword()"><<</button> 第<span id="pageNow">${pageNow}</span>页 <button οnclick="getNext()" >>></button> 共<span id="total">${total}</span>条 <span> <select id="pageSize"> <option selected="selected" value="5">5</option> <option value="10">10</option> <option value="15">15</option> </select> 条/页</span> </center> </body> </html>运行效果如下

转载请注明原文地址: https://www.6miu.com/read-51970.html

最新回复(0)