mybatis中PageHelper的使用(分页)
Posted 永旗狍子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis中PageHelper的使用(分页)相关的知识,希望对你有一定的参考价值。
引言:PageHelper是适用于MyBatis框架的一个分页插件,使用方式极为便捷,支持任何复杂的单表、多表分页查询操作。
一.开发步骤
1.引入依赖
pom.xml中引入PageHelper依赖。https://github.com/pagehelper/Mybatis-PageHelper
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.10</version>
</dependency>
2.配置MyBatis-config.xml
在mybatis-config.xml中添加<plugins>
<configuration>
<typeAliases></typeAliases>
<plugins>
<!-- com.github.pagehelper为PageHelper类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
<environments>...</environments>
</configuration>
PageInfo对象包含了分页操作中的所有相关数据
PageInfo.class是插件里的类,非常方便的调用,分页再次提高性能:
//当前页
private int pageNum;
//每页的数量
private int pageSize;
//当前页的数量
private int size;
//由于startRow和endRow不常用,这里说个具体的用法
//可以在页面中"显示startRow到endRow 共size条数据"
//当前页面第一个元素在数据库中的行号
private int startRow;
//当前页面最后一个元素在数据库中的行号
private int endRow;
//总记录数
private long total;
//总页数
private int pages;
//结果集
private List<T> list;
//前一页
private int prePage;
//下一页
private int nextPage;
//是否为第一页
private boolean isFirstPage;
//是否为最后一页
private boolean isLastPage;
//是否有前一页
private boolean hasPreviousPage;
//是否有下一页
private boolean hasNextPage;
//导航页码数
private int navigatePages;
//所有导航页号
private int[] navigatepageNums;
//导航条上的第一页
private int navigateFirstPage;
//导航条上的最后一页
private int navigateLastPage;
public PageInfo() {
this.isFirstPage = false;
this.isLastPage = false;
this.hasPreviousPage = false;
this.hasNextPage = false;
}
测试模块
/**
* 测试分页的方法
*/
@Test
public void empsTest() throws Exception {
//模拟请求拿到返回值
MvcResult result = mockMvc.perform(MockMvcRequestBuilders.get("/emps").param("pn", "10")).andReturn();
//请求成功后,请求域中会有pageInfo,我们可以取出pageInfo进行验证。
MockHttpServletRequest mockHttpServletRequest = result.getRequest();
PageInfo pageInfo = (PageInfo) mockHttpServletRequest.getAttribute("pageInfo");
System.out.println("当前页码:" + pageInfo.getPageNum());
System.out.println("总页面:" + pageInfo.getPages());
System.out.println("总记录数:" + pageInfo.getTotal());
System.out.println("在页面连续显示的页码:");
int[] page = pageInfo.getNavigatepageNums();
for (int pn : page) {
System.out.print(pn + " ");
}
System.out.println();
//获取员工数据
List<Employee> employees = pageInfo.getList();
for (Employee emp : employees) {
System.out.println("员工ID:" + emp.getEmpId() + "员工姓名:" + emp.getEmpName() + "员工邮箱:" + emp.getEmail());
}
}
页面使用
1). 头部引用
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<script src="/js/jquery.min.js"></script>
2). 页面使用
<div style="text-align: center">
<a href="${pageContext.request.contextPath}/reg.jsp">新增</a>
<a href="${pageContext.request.contextPath}/emp?method=showAll&pageNum=1&pageSize=5">首页</a>
//判断是否有前一页
<c:if test="${pageInfo.hasPreviousPage}">
<a href="${pageContext.request.contextPath}/emp?method=showAll&pageNum=${pageInfo.prePage>1?pageInfo.prePage:1}&pageSize=5">上一页</a>
</c:if>
<c:forEach begin="1" end="${pageInfo.pages}" var="i">
<a href="${pageContext.request.contextPath}/emp?method=showAll&pageNum=${i}&pageSize=5">${i}</a>
</c:forEach>
//判断是否有下一页
<c:if test="${pageInfo.hasNextPage}">
<a href="${pageContext.request.contextPath}/emp?method=showAll&pageNum=${pageInfo.nextPage>=pageInfo.pages?pageInfo.pages:pageInfo.nextPage}&pageSize=5">下一页</a>
</c:if>
<a href="${pageContext.request.contextPath}/emp?method=showAll&pageNum=${pageInfo.pages}&pageSize=5">尾页</a>
</div>
以上是关于mybatis中PageHelper的使用(分页)的主要内容,如果未能解决你的问题,请参考以下文章