一、分页工具类
package com.ygr.usermanage.utils; public class PageUtil { /**每页多少条数据*/ private int pageSize = 10; /**总记录条数*/ private int totalCount; /**当前页*/ private int currentPage; /**总页数*/ private int pageCount; public PageUtil(int pageSize, int totalCount, int currentPage) { this.pageSize = pageSize; this.totalCount = totalCount; this.setCurrentPage(currentPage); } /** * 当前页边界检查 * 不大不大于总页数,最小不小于一页 * @param currentPage */ public void setCurrentPage(int currentPage) { int activePage = currentPage <= 0 ? 1 : currentPage; activePage = activePage > getPageCount() ? getPageCount() : activePage; this.currentPage = activePage; } /** * 计算总页数 * @return */ public int getPageCount() { pageCount = totalCount / pageSize; // 26 / 10 2 int mod = totalCount % pageSize; // 26 % 10 6 if (mod != 0) { pageCount++; //3 } return totalCount == 0 ? 1 : pageCount; } /** * 获取开始记录序号 * * 每页显示10条记录 * 1页 0 0-9 * 2页 10 10-19 * 3页 20 20-29 * ..... * n页 (n-1)*10 * */ public int getFromIndex() { return (currentPage - 1) * pageSize; } /** * 结束记录序号 * @return */ public int getToIndex() { return Math.min(totalCount, currentPage * pageSize); } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } }
二、持久层中的方法:
@Override public List<Car> getPageUserLists(int getFromIndex,int getPageSize) { List<Car> lists = getHibernateTemplate().execute(new HibernateCallback<List<Car>>() { @Override public List<Car> doInHibernate(Session session) throws HibernateException { Query query = session.createQuery("FROM Car ").setFirstResult(getFromIndex) .setMaxResults(getPageSize); List<Car> lists = (List<Car>) query.list(); return lists; } }); return lists; // 重点在于两个方法setFirstResult()和setMaxResults()查询数据库中位于这个两个id坐标之间的数据返回得到的一个数组,即为每个页面中显示的数据 // setFirstResult()中的参数为,获取每个分页第一个数据的坐标位置, // setMaxResults()中的参数为每页显示多少条记录个数 } 三、控制层中的代码: @RequestMapping("/show") public String showAll(Integer pageNum, Map<String, Object> map, Model model) { int pageSize = 10 ; // 非空判断页面数,如果页面不为空赋值给currentPage if (pageNum != null && pageNum > 0) { currentPage = pageNum; } int count = carServer.getTotalCount(); PageUtil pageUtil = new PageUtil(pageSize, count, currentPage); List<Car> carLists = carServer.getPageUserLists(pageUtil.getFromIndex(), pageUtil.getPageSize()); map.put("carLists", carLists); model.addAttribute("currentPage", currentPage); model.addAttribute("totalPage", pageUtil.getPageCount()); return "/list_car"; }四、jsp前端界面:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <% // 获取请求的上下文 String context = request.getContextPath(); %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>汽车列表</title> <script type="text/javascript"> // 当前第几页数据 var currentPage = ${currentPage}; // 总页数 var totalPage = ${totalPage}; function submitForm(actionUrl){ window.location.href = actionUrl; } // 第一页 function firstPage(){ if(currentPage == 1){ alert("已经是第一页数据"); return false; }else{ submitForm("<%=context%>/show.do?pageNum=1"); return true; } } // 下一页 function nextPage(){ if(currentPage == totalPage){ alert("已经是最后一页数据"); return false; }else{ submitForm("<%=context%>/show.do?pageNum=" + (currentPage+1)); return true; } } // 上一页 function previousPage(){ if(currentPage == 1){ alert("已经是第一页数据"); return false; }else{ submitForm("<%=context%>/show.do?pageNum=" + (currentPage-1)); return true; } } // 尾页 function lastPage(){ if(currentPage == totalPage){ alert("已经是最后一页数据"); return false; }else{ submitForm("<%=context%>/show.do?pageNum=${totalPage}"); return true; } } </script> </head> <body> <table width="100%" border="0" bgcolor="#cccccc"> <tr> <td>车牌号</td> <td>车辆品牌/型号</td> <td>车主姓名</td> <td>车主电话</td> <td>车主地址</td> <td colspan="2">操作</td> </tr> <% String color = ""; int c = 1; %> <c:forEach items="${carLists}" var="car"> <% if (c == 1) { color = "#ffffff"; c = 0; } else { color = "#f5f5f5"; c = 1; } %> <tr bgcolor="<%=color%>"> <td>${car.carNumber}</td> <td>${car.carName}</td> <td>${car.persenName}</td> <td>${car.telephone}</td> <td>${car.address}</td> <td><a href="./delete.do?id=${car.id}">删除</a></td> <td><a href="./update.do?id=${car.id}">修改</a></td> </tr> </c:forEach> </table> <br> <br>共${totalPage}页 当前第${currentPage}页 <a href="#" οnclick="firstPage();">首页</a> <a href="#" οnclick="previousPage();">上一页</a> <a href="#" οnclick="nextPage();">下一页</a> <a href="#" οnclick="lastPage();">尾页</a> <br> </body> </html>