springboot整合PageHelper

1.引入依赖

<!-- MyBatis分页插件 -->
<dependency>
   <groupId>com.github.pagehelper</groupId>
   <artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.8</version>
</dependency>

 

2.在全文配置文件中配置PageHelper

#分页插件
pagehelper.helper-dialect=mysql
pagehelper.params=count=countSql
pagehelper.reasonable=true
pagehelper.support-methods-arguments=true

 

3.mapper

//根据状态查找会员
    @Select("select * from vip where state = #{state}")
    List<VIP> findVIPByState(@Param("state") Integer state);

4.service

    @Override
    public List<VIP> findVIPByState(Integer state) {
        List<VIP> vips = mapper.findVIPByState(state);
        return vips;
    }

 

5.controller

    @RequestMapping("/list")
    public String list(Model model,@RequestParam(defaultValue = "1",value = "pageNum") Integer pageNum){
        PageHelper.startPage(pageNum,5);
        List<VIP> vip = service.findVIPByState(1);
        PageInfo<VIP> vips = new PageInfo<>(vip);
        model.addAttribute("VIPs",vips);
        return "/member/member-list";
    }

 

6.thymeleaf渲染

 <xblock><button class="layui-btn layui-btn-danger" onclick="delAll()"><i class="layui-icon">&#xe640;</i>批量删除</button>
                    <a class="layui-btn" th:href="@{/member/addPage}"><i class="layui-icon">&#xe608;</i>添加</a><span class="x-right" style="line-height:40px">共有数据:<span th:text="${VIPs.total}"></span></span></xblock>
            <table class="layui-table">
                <thead>
                    <tr>
                        <th>
                            <input type="checkbox" name="" value="">
                        </th>
                        <th>
                            ID
                        </th>
                        <th>
                            用户名
                        </th>
                        <th>
                            性别
                        </th>
                        <th>
                            手机
                        </th>
                        <th>
                            邮箱
                        </th>
                        <th>
                            地址
                        </th>
                        <th>
                            加入时间
                        </th>
                        <th>
                            状态
                        </th>
                        <th>
                            操作
                        </th>
                    </tr>
                </thead>
                <tbody>
                    <tr th:each="vip:${VIPs.list}">
                        <td>
                            <input type="checkbox" value="1">
                        </td>
                        <td th:text="${vip.getId()}">
                            1
                        </td>
                        <td th:text="${vip.getUsername()}">
                            小明
                        </td>
                        <td th:text="${vip.getSex()}"></td>
                        <td th:text="${vip.getPhone()}">
                            13000000000
                        </td>
                        <td th:text="${vip.getEmail()}">
                            admin@mail.com
                        </td>
                        <td th:text="${vip.getAddress()}">
                            北京市 海淀区
                        </td>
                        <td th:text="${#dates.format(vip.getJoindate(),'yyyy-MM-dd')}">
                            2017-01-01 11:11:42
                        </td>
                        <td class="td-status">
                            <span th:if="${vip.getState()==1}" class="layui-btn layui-btn-normal layui-btn-mini">
                                已启用
                            </span>
                            <span th:if="${vip.getState()==0}" class="layui-btn layui-btn-normal layui-btn-mini">
                                已停用
                            </span>
                        </td>
                        <td class="td-manage">
                            <a style="text-decoration:none" onclick="confirm()" th:href="@{/member/stop/}+${vip.getId()}" title="停用">
                                <i class="layui-icon">&#xe601;</i>
                            </a>
                            <a title="编辑" href="javascript:;" th:href="@{/member/updateMessagePage/}+${vip.getId()}"
                            class="ml-5" style="text-decoration:none">
                                <i class="layui-icon">&#xe642;</i>
                            </a>
                            <a style="text-decoration:none" th:href="@{/member/updatePwdPage/}+${vip.getId()}"
                               title="修改密码">
                                <i class="layui-icon">&#xe631;</i>
                            </a>
                        </td>
                    </tr>
                </tbody>
            </table>
            <!-- 右侧内容框架,更改从这里结束 -->
          </div>
            <div style="margin-left: 1400px">
                <p>当前第 <span th:text="${VIPs.pageNum}"></span> 页,总 <span th:text="${VIPs.pages}"></span> 页,共 <span th:text="${VIPs.total}"></span> 条记录</p>
                <br>
                <a th:href="@{/member/list}">首页</a>&nbsp;&nbsp;
                <a th:href="@{/member/list(pageNum=${VIPs.hasPreviousPage}?${VIPs.prePage}:1)}">上一页</a>&nbsp;&nbsp;
                <a th:href="@{/member/list(pageNum=${VIPs.hasNextPage}?${VIPs.nextPage}:${VIPs.pages})}">下一页</a>&nbsp;&nbsp;
                <a th:href="@{/member/list(pageNum=${VIPs.pages})}">尾页</a>
            </div>

        </div>

最后结果展示

 

 

 

其中官方对于PageInfo的使用介绍

//获取第1页,10条内容,默认查询总数count

PageHelper.startPage(1, 10);

List<Country> list = countryMapper.selectAll();

//用PageInfo对结果进行包装

PageInfo page = new PageInfo(list);

//测试PageInfo全部属性

//PageInfo包含了非常全面的分页属性

assertEquals(1, page.getPageNum());   //当前页

assertEquals(10, page.getPageSize());   //当前页面显示的数据条目

assertEquals(183, page.getTotal());  //数据的总条目数

assertEquals(19, page.getPages());  //总页数

assertEquals(1, page.getFirstPage());  //第一页

assertEquals(8, page.getLastPage());  //最后一页

assertEquals(true, page.isFirstPage());  //判断是否第一页

assertEquals(false, page.isLastPage());  //判断是否是最后一页

assertEquals(false, page.isHasPreviousPage());  //是否有上一页

assertEquals(true, page.isHasNextPage());  //是否有下一页

 

 

 

在测试的时候遇到一个问题:

<p>当前第 <span th:text="${VIPs.pageNum}"></span> 页,总 <span th:text="${VIPs.pages}"></span> 页,共 <span th:text="${VIPs.total}"></span> 条记录</p>
                <br>
                <a th:href="@{/member/list}">首页</a>&nbsp;&nbsp;
                <a th:href="@{/member/list(pageNum=${VIPs.hasPreviousPage}?${VIPs.prePage}:1)}">上一页</a>&nbsp;&nbsp;
                <a th:href="@{/member/list(pageNum=${VIPs.hasNextPage}?${VIPs.nextPage}:${VIPs.pages})}">下一页</a>&nbsp;&nbsp;
                <a th:href="@{/member/list(pageNum=${VIPs.pages})}">尾页</a>

其中博主在也页数的时候写成了

<p>当前第 <span th:text="${vip.pageNum}"></span> 页,总 <span th:text="${vip.pages}"></span> 页,共 <span th:text="${vip.total}"></span> 条记录</p>
                <br>
                <a th:href="@{/member/list}">首页</a>&nbsp;&nbsp;
                <a th:href="@{/member/list(pageNum=${vip.hasPreviousPage}?${vip.prePage}:1)}">上一页</a>&nbsp;&nbsp;
                <a th:href="@{/member/list(pageNum=${vip.hasNextPage}?${vip.nextPage}:${vip.pages})}">下一页</a>&nbsp;&nbsp;
                <a th:href="@{/member/list(pageNum=${vip.pages})}">尾页</a>

导致了空指针异常!!!

其中的vip是对后端传入的VIPs的结果集的别名。因此拥有页数的应该是VIPs这个整体,而不是结果集

<tr th:each="vip:${VIPs.list}">

 

posted @ 2020-06-10 00:31  努力学习的Peanut  阅读(237)  评论(1)    收藏  举报