共计 5019 个字符,预计需要花费 13 分钟才能阅读完成。
1、PageHelper 普通分页
1.1、PageHelper 分页概述
PageHelper:是中国的开源的 mybatis 分页插件, 通过该插件可以非常简单的实现分页功能;
1.2、完成 PageHelper 分页
1.2.1、加载 jar 包
pom.xml
<dependency> | |
<groupId>com.github.pagehelper</groupId> | |
<artifactId>pagehelper</artifactId> | |
<version>5.1.10</version> | |
</dependency> |
1.2.2、配置分页面插件
applicationContext.xml
<!-- 配置 sqlSessionFactory 工厂 --> | |
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> | |
<property name="dataSource" ref="dataSource"/> | |
<!-- 在 sqlSessionFactory 中引入该插件 --> | |
<property name="plugins"> | |
<array> | |
<bean class="com.github.pagehelper.PageInterceptor"> | |
<property name="properties"> | |
<value> | |
helperDialect=mysql | |
</value> | |
</property> | |
</bean> | |
</array> | |
</property> | |
</bean> |
1.2.3、修改控制器
ManagerController.java
"/loginManager") | (|
public String loginManager(Manager m, Model model, HttpSession session, "1")Integer pageNum, (defaultValue="2")Integer pageSize){ (defaultValue = List<Manager> list=iManagerServcie.loginManager(m); | |
if(list.size()>0){PageHelper.startPage(pageNum,pageSize); | |
List<Students> list1=iStudentsService.findAll(pageNum,pageSize); | |
PageInfo<Students> pageInfo=new PageInfo<Students>(list1); | |
session.setAttribute("uname",m.getUname()); | |
model.addAttribute("pageInfo",pageInfo); | |
//model.addAttribute("list",list1); | |
return "index"; | |
}else{return "login"; | |
} | |
} |
StudentsController.java
"/findAll") | (|
public String findAll(Model model, "1")Integer pageNum, (defaultValue="2")Integer pageSize){ (defaultValue = PageHelper.startPage(pageNum,pageSize); | |
List<Students> list=iStudentsService.findAll(pageNum,pageSize); | |
PageInfo<Students> pageInfo=new PageInfo<Students>(list); | |
model.addAttribute("pageInfo",pageInfo); | |
//model.addAttribute("list",list); | |
return "index"; | |
} |
1.2.4、PageInfo 对象
PageInfo 的分页计算结果很多,部分经常用到的属性如下:
当前页 private int pageNum; | |
每页的数量 private int pageSize; | |
当前页的数量 private int size; | |
当前页面第一个元素在数据库中的行号 private int startRow; | |
当前页面最后一个元素在数据库中的行号 private int endRow; | |
总记录数 private long total; | |
总页数 private int pages; | |
结果集 private List<T> list; | |
第一页 private int firstPage; | |
前一页 private int prePage; | |
是否为第一页 private boolean isFirstPage = false; | |
是否为最后一页 private boolean isLastPage = false; | |
是否有前一页 private boolean hasPreviousPage = false; | |
是否有下一页 private boolean hasNextPage = false; | |
导航页码数 private int navigatePages; | |
所有导航页号 private int[] navigatepageNums; |
1.2.5、编写分页页面
index.jsp
<tr> | |
<td colspan="5" > | |
<div style="line-height: 20px;height: 20px;text-align: center;font-size: 14px"> | |
共 [${pageInfo.total} ] 条记录 | 共 [${pageInfo.pages} ] 页 | |
<c:if test="${pageInfo.pageNum > 1}"> | |
[<A href="${pageContext.request.contextPath}/findAll?pageNum=${pageInfo.pageNum-1}&pageSize=2"> 前一页 </A> ] | |
</c:if> | |
<c:if test="${pageInfo.pageNum <=1}"> | |
[前一页] | |
</c:if> | |
| 当前第 [${pageInfo.pageNum} ] 页 | |
<c:if test="${pageInfo.pageNum < pageInfo.pages}"> | |
|[<A href="${pageContext.request.contextPath}/findAll?pageNum=${pageInfo.pageNum+1}&pageSize=2"> 后一页 </A> ] | |
</c:if> | |
<c:if test="${pageInfo.pageNum >= pageInfo.pages}"> | |
[后一页] | |
</c:if> | |
</div> | |
</td> | |
</tr> |
1.2.6、分页问题
当删除完记录时,在次查询数据回到了首页。
解决方案:
修改删除超链接
<a href="${pageContext.request.contextPath}/deleteStudents?sid=${students.sid}&pageNum=${pageInfo.pageNum}&pageSize=2"> 删除 </a>
修改控制器
"/deleteStudents") | (|
public String deleteSudents(int sid,"1")Integer pageNum, (defaultValue="2")Integer pageSize){iStudentsService. (defaultValue = deleteStudents(sid); | |
return "forward:findAll"; | |
} |
2、PageHelper 查询分页
2.1、编写控制器
StudentsController.java
"/findBySname") | (|
public String findBySname(Model model,String sname, (defaultValue = "1")Integer pageNum, (defaultValue="2")Integer pageSize){PageHelper.startPage(pageNum,pageSize); | |
List<Students> list=iStudentsService.findByName("%"+sname+"%"); | |
PageInfo<Students> pageInfo=new PageInfo<Students>(list); | |
model.addAttribute("pageInfo",pageInfo); | |
model.addAttribute("sname",sname); | |
return "forward:/index.jsp"; | |
} |
2.2、编写页面
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> 天易 IT 学院学生信息查询系统 </title> | |
</head> | |
<body> | |
<center> | |
<h3> 天易 IT 学院学生信息查询系统 </h3> | |
<form action="${pageContext.request.contextPath}/findBySname?pageNum=${pageInfo.pageNum}&pageSize=2" method="post"> | |
请输入学生姓名:<input type="text" name="sname" value="${sname}"><input type="submit" value="查看学生信息"> | |
</form> | |
<table> | |
<c:if test="${pageInfo!=null}"> | |
<tr><th> 学员 ID</th><th> 学员姓名 </th><th> 学员性别 </th><th> 学员年龄 </th></tr> | |
<c:forEach items="${pageInfo.list}" var="students"> | |
<tr><td>${students.sid}</td><td>${students.sname}</td><td>${students.sex}</td><td>${students.age}</td></tr> | |
</c:forEach> | |
<tr> | |
<td colspan="5" > | |
<div style="line-height: 20px;height: 20px;text-align: center;font-size: 14px"> | |
共 [${pageInfo.total} ] 条记录 | 共 [${pageInfo.pages} ] 页 | | |
<c:if test="${pageInfo.pageNum > 1}"> | |
[<A href="${pageContext.request.contextPath}/findBySname?sname=${sname}&pageNum=${pageInfo.pageNum-1}&pageSize=2"> 前一页 </A> ] | |
</c:if> | |
<c:if test="${pageInfo.pageNum <=1}"> | |
[前一页] | |
</c:if> | |
| 当前第 [${pageInfo.pageNum} ] 页 | |
<c:if test="${pageInfo.pageNum < pageInfo.pages}"> | |
|[<A href="${pageContext.request.contextPath}/findBySname?sname=${sname}&pageNum=${pageInfo.pageNum+1}&pageSize=2"> 后一页 </A> ] | |
</c:if> | |
<c:if test="${pageInfo.pageNum >= pageInfo.pages}"> | |
[后一页] | |
</c:if> | |
</div> | |
</td> | |
</tr> | |
</c:if> | |
</table> | |
</center> | |
</body> | |
</html> |
正文完
星哥玩云-微信公众号
