一、PageHelper
1、PageHelper是MyBatis中非常方便的第三方分页插件。
2.官方文档:https://github.com/pagehelper/MybatisPageHelper/blob/master/README_zh.md
二、使用步骤
1、导入相关 jar 包:
jsqlparser-0.9.5.jar
pagehelper-5.0.0-rc.jar
2、在MyBatis全局配置文件中配置分页插件
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
3、使用PageHelper提供的方法进行分页
@Test
public void testPageHelper() {
//参数一:当前要显示的页码;参数二:每页显示的数量
Page<Employee> page = PageHelper.startPage(1, 2);
List<Employee> emps = empMapper.getAllEmps();
System.out.println("总记录数:" + page.getTotal());
System.out.println("当前页码:" + page.getPageNum());
System.out.println("每页的记录数:" + page.getPageSize());
System.out.println("总页码:" + page.getPages());
//输出当前页码的数据
for (Employee employee : emps) {
System.out.println(employee);
}
}
使用更强大的 PageInfo 封装返回结果:
@Test
public void testPageHelper() {
//参数一:当前要显示的页码;参数二:每页显示的数量
Page<Employee> page = PageHelper.startPage(1, 2);
List<Employee> emps = empMapper.getAllEmps();
//包装 Page 对象,参数一:list page 结果; 参数二:页码数量(前台显示数据的页码数量)
PageInfo<Employee> info = new PageInfo<>(emps,3);
//显示数据
for (Employee employee : emps) {
System.out.println(employee);
}
//在 PageInfo 中可以获取到详细信息。
System.out.println("当前页码:" + info.getPageNum());
System.out.println("总记录数:" + info.getTotal());
System.out.println("每页的记录数:" + info.getPageSize());
System.out.println("总页码:" + info.getPages());
System.out.println("是否为第一页:" + info.isIsFirstPage());
System.out.println("是否为最后一页:" + (info.isHasNextPage()==false?"YES":"NO"));
System.out.println("连续显示的页码:");
int[] nums = info.getNavigatepageNums();
for (int i : nums) {
System.out.println(i);
}
/*在这里 MyBatis 也帮我们处理好了连续显示页码的问题,当前页码应该
在连续显示页码的中间位置,全部都由 PageHelper 插件完成了,我们使用就是了。*/
}
三、使用 PageHelper 和 BootStrap 实现分页效果
1、后台代码:
@RequestMapping("/pageHelper")
public String pageHelper(@RequestParam(value="pageIndex",defaultValue="1") Integer pageIndex,
Model model) {
//接收的参数是当前显示的页码,默认值为第一页。
//每页显示两条数据
PageHelper.startPage(pageIndex, 2);
List<Business> list = businessService.getAllBusiness();
//连续显示三页
PageInfo<Business> info = new PageInfo<>(list, 3);
model.addAttribute("pageInfo", info);
model.addAttribute("list", list);
return "list";
}
2.前台 list.jsp 代码:
需要引入 bootstrap.css 文件
<body>
<center>
<table class="table table-bordered table-hover">
<tr>
<th>ID</th>
<th>StoreName</th>
<th>Phone</th>
<th>RegistTime</th>
</tr>
<c:forEach items="${list}" var="bus">
<tr>
<td>${bus.id }</td>
<td>${bus.storeName }</td>
<td>${bus.phone }</td>
<td>${bus.registTime }</td>
</tr>
</c:forEach>
</table>
<ul class="pagination">
<c:forEach items="${pageInfo.navigatepageNums}" var="index">
<!-- 当前页高亮 -->
<c:if test="${pageInfo.pageNum==index }">
<li class="active" ><a href="#">${index}</a></li>
</c:if>
<c:if test="${pageInfo.pageNum!=index }">
<li><a href="${pageContext.request.contextPath }/pageHelper?pageIndex=${index}">${index }</a></li>
</c:if>
</c:forEach>
</ul>
<div>
<!-- 首页和尾页 -->
<a href="${pageContext.request.contextPath}/pageHelper?pageIndex=1">首页</a>
<a href="${pageContext.request.contextPath}/pageHelper?pageIndex=${pageInfo.pages}">尾页</a>
<!-- 上一页,下一页 -->
<c:if test="${pageInfo.pageNum > 1 }">
<a href="${pageContext.request.contextPath}/pageHelper?pageIndex=${pageInfo.pageNum-1}">上一页</a>
</c:if>
<c:if test="${pageInfo.pageNum < pageInfo.pages }">
<a href="${pageContext.request.contextPath}/pageHelper?pageIndex=${pageInfo.pageNum+1}">下一页</a>
</c:if>
<br/>
</div>
<div>当前第${pageInfo.pageNum }页,共${pageInfo.pages }页,共${pageInfo.total}条记录</div>
</center>
</body>
效果: