共计 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
@RequestMapping("/loginManager")
public String loginManager(Manager m, Model model, HttpSession session, @RequestParam(defaultValue = "1")Integer pageNum, @RequestParam(defaultValue="2")Integer pageSize){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
@RequestMapping("/findAll")
public String findAll(Model model, @RequestParam(defaultValue = "1")Integer pageNum,@RequestParam(defaultValue="2")Integer pageSize){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>
修改控制器
@RequestMapping("/deleteStudents")
public String deleteSudents(int sid,@RequestParam(defaultValue = "1")Integer pageNum,@RequestParam(defaultValue="2")Integer pageSize){iStudentsService.deleteStudents(sid);
return "forward:findAll";
}
2、PageHelper 查询分页
2.1、编写控制器
StudentsController.java
@RequestMapping("/findBySname")
public String findBySname(Model model,String sname,@RequestParam(defaultValue = "1")Integer pageNum,@RequestParam(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>
正文完
星哥玩云-微信公众号