一
在pom文件中引入依赖
<!-- 分页助手启动器 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pageHelper.starter.version}</version>
</dependency>
二
在application.yml文件中添加pagehelper配置,如果用的是mysql,就把oracle换成mysql
#pagehelper分页插件设置
pagehelper:
helper-dialect: oracle
reasonable: true
support-methods-arguments: true
params: count=countSql
三
开始使用pagehelper
@Service @Transactional public class OrderServiceImpl implements OrderService { @Autowired private OrdersMapper ordersMapper; @Override public List<Orders> findAll(int page,int size) throws Exception { PageHelper.startPage(page,size); return ordersMapper.getOrderProduct(); } }
在调用sql的语句前,加上一行代码, PageHelper.startPage(page,size);,俩个参数分别表示的是当前页码和每页的数据条数
四
PageInfo的引入,PageInfo是PageHelper提供给我们的一个封装了各种分页信息的Bean,所以在Controller层中将上一步中通过分页查询出来的List封装到PageInfo中
@RequestMapping("findAll.do")
public ModelAndView findAll(@RequestParam(name="page",required = true,defaultValue = "1")int page,
@RequestParam(name = "size",required = true,defaultValue = "4")int size) throws Exception {
List<Orders> ordersList = orderService.findAll(page,size);
PageInfo pageInfo = new PageInfo(ordersList);
ModelAndView mv = new ModelAndView();
mv.addObject("pageInfo",pageInfo);
mv.setViewName("orders-page-list");
return mv;
}
以上代码中将分页查询出来的orderList封装到了PageInfo中,再讲pageInfo添加到model中
五
PageInfo中的几个分页属性
public class PageInfo<T> implements Serializable {
private static final long serialVersionUID = 1L;
private int pageNum;//表示当前页为第几页
private int pageSize;//表示每页存储了多少条数据
private int size;
private int startRow;
private int endRow;
private long total;
private int pages;//表示一共有多少页数据
private List<T> list;//表示的是通过分页查询出来的具体结果集,在之前将orderList封装到PageInfo中后,list属性表示的就是orderList,
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;
六
在页面中具体使用分页信息
1 使用pageInfo中的list属性
<c:forEach items="${pageInfo.list}" var="orders">
<tr>
<td><input name="ids" type="checkbox"></td>
<td>${orders.id }</td>
<td>${orders.ordernum }</td>
<td>${orders.product.productname }</td>
<td>${orders.product.productprice }</td>
<td>${orders.ordertimeStr }</td>
<td class="text-center">${orders.orderstatusStr }</td>
<td class="text-center">
<button type="button" class="btn bg-olive btn-xs">订单</button>
<button type="button" class="btn bg-olive btn-xs" onclick="location.href='${pageContext.request.contextPath}/orders/findById.do?id=${orders.id}'">详情</button>
<button type="button" class="btn bg-olive btn-xs">编辑</button>
</td>
</tr>
</c:forEach>
上文中已经提到,将orderList封装到PageInfo后,PageInfo中的list属性表示的就是orderList,所以在页面中遍历pageInfo.list
2 使用pageInfo中的其它分页信息
<ul class="pagination">
<li><a href="/orders/findAll.do?page=1&size=${pageInfo.pageSize}" aria-label="Previous">首页</a></li>
<li><a href="/orders/findAll.do?page=${pageInfo.pageNum-1}&size=${pageInfo.pageSize}">上一页</a></li>
<c:forEach begin="1" end="${pageInfo.pages}" var="pageNum">
<li><a href="/orders/findAll.do?page=${pageNum}&size=${pageInfo.pageSize}">${pageNum}</a></li>
</c:forEach>
<li><a href="/orders/findAll.do?page=${pageInfo.pageNum+1}&size=${pageInfo.pageSize}">下一页</a></li>
<li><a href="/orders/findAll.do?page=${pageInfo.pages}&size=${pageInfo.pageSize}" aria-label="Next">尾页</a></li>
</ul>
在这里需要注意的就是遍历中间页,pageInfo.pages表示的是一共有多少页数据,所以通过c:forEach遍历,开始索引为1,最终索引为pageInfo.pages