MyBatis(十一) PageHelper插件进行分页

一、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>

效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值