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"></i>批量删除</button>
<a class="layui-btn" th:href="@{/member/addPage}"><i class="layui-icon"></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"></i>
</a>
<a title="编辑" href="javascript:;" th:href="@{/member/updateMessagePage/}+${vip.getId()}"
class="ml-5" style="text-decoration:none">
<i class="layui-icon"></i>
</a>
<a style="text-decoration:none" th:href="@{/member/updatePwdPage/}+${vip.getId()}"
title="修改密码">
<i class="layui-icon"></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>
<a th:href="@{/member/list(pageNum=${VIPs.hasPreviousPage}?${VIPs.prePage}:1)}">上一页</a>
<a th:href="@{/member/list(pageNum=${VIPs.hasNextPage}?${VIPs.nextPage}:${VIPs.pages})}">下一页</a>
<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> <a th:href="@{/member/list(pageNum=${VIPs.hasPreviousPage}?${VIPs.prePage}:1)}">上一页</a> <a th:href="@{/member/list(pageNum=${VIPs.hasNextPage}?${VIPs.nextPage}:${VIPs.pages})}">下一页</a> <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> <a th:href="@{/member/list(pageNum=${vip.hasPreviousPage}?${vip.prePage}:1)}">上一页</a> <a th:href="@{/member/list(pageNum=${vip.hasNextPage}?${vip.nextPage}:${vip.pages})}">下一页</a> <a th:href="@{/member/list(pageNum=${vip.pages})}">尾页</a>
导致了空指针异常!!!
其中的vip是对后端传入的VIPs的结果集的别名。因此拥有页数的应该是VIPs这个整体,而不是结果集
<tr th:each="vip:${VIPs.list}">

浙公网安备 33010602011771号