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的使用(分页)的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis使用pagehelper进行分页

mybatis分页插件PageHelper的使用(转)

Mybatis 的分页插件 PageHelper

Mybatis 的分页插件PageHelper-4.1.1的使用

mybatis + PageHelper 实现分页

Mybatis分页插件PageHelper使用