目录
我们在业务层实现分页,这样以便我们加一些自己的逻辑;首先,实体类都加上page(页码)、limit(每页数据)两个数据,
1.首先定义一个实体类,加上属性为页码、每页数据量两种,然后我们控制器可以接收到前端传入的实体类参数(因为此时实体类中是有页码和数据数属性的),然后进行查询,根据查询条件我们可以得到对应每页的数据;所以说控制器中有两个方法:1.调用业务层中的查询方法;2.调用业务层中查询总数量(因为这里每页的数据量我们没有在后台写死,所以我们要通过总数量和页码来得到);
2.然后再在业务层中实现pagehelper.startPage()方法进行分页;
package com.yanzhen.utils;
import java.io.Serializable;
public class Entity implements Serializable {
private Integer page;
private Integer limit;
public Integer getPage() {
return page;
}
public void setPage(Integer page) {
this.page = page;
}
public Integer getLimit() {
return limit;
}
public void setLimit(Integer limit) {
this.limit = limit;
}
}
然后我们其他需要分页的类extends这个类就可以了,这样的话比较方便
2.下一步我们配置maven依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.11</version>
</dependency>
3.对service层进行修改,对subject课程信息进行分页处理:
*:PageHelper.startPage(subject.getPage(),subject.getLimit());//进行分页处理(偷偷再敲一次加深印象)
public List<Subject> query(Subject subject) {
//当查询条件有分页信息时,按照分页查询
if(subject != null && subject.getPage() != null){
//将subject进行分页处理,页码、每页的数据
PageHelper.startPage(subject.getPage(),subject.getLimit());
}
//将subject转为map容器中,然后调用dao查询所有的课程
return subjectDao.query(BeanMapUtils.beanToMap(subject));
}
4.Controller接收前端响应json字符串,进行分页操作
@PostMapping("/query")
@ResponseBody
public Map<String,Object> query(@RequestBody Subject subject){
List<Subject>list=subjectService.query(subject);//得到分页分好后的课程
Integer count=subjectService.count(subject);//得到课程数量
return MapControll.getInstance().success().page(list,count).getMap();//放入map容器中,返回给前端
}
1.首先我们导入依赖:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.13</version>
</dependency>
2.在yml中对pagehelper进行配置:
pagehelper:
helper-dialect: mysql
reasonable: true #当页码小于1大于最大值时,显示第一页的数据
support-methods-arguments: true
3.我们在controller中直接使用pagehelper.startPage()和PageInfo(利用它的构造函数初始化分页结果):当前端点击页数时,触动请求(并且将页码作为参数传给处理请求的方法),然后方法对此处理调用业务得到所有的用户,并且根据页码和每页数据进行分页;最后将pageinfo传入model中,返回给前端;
@GetMapping("/types")
public String types(@RequestParam(required = false,defaultValue = "1",value = "pagenum")int pagenum, Model model){
PageHelper.startPage(pagenum, 5); //pagenum:页数,pagesize:每页的信息数
List<Type> allType = typeService.getAllType(); //调用业务层查询方法
PageInfo<Type> pageInfo = new PageInfo<>(allType); //得到分页结果对象
model.addAttribute("pageInfo", pageInfo); //携带分页结果信息
return "admin/types"; //回到前端展示页面
}
4.前端页面(这里用的thymeleaf):
<table class="ui compact celled teal table">
<thead>
<tr>
<th></th>
<th>名称</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr th:each="type, iterStat : ${pageInfo.list}">
<td th:text="${iterStat.count}">1</td>
<td th:text="${type.name}">摸鱼方法</td>
<td>
<a href="#" th:href="@{/admin/types/{id}/input(id=${type.id})}" class="ui mini teal basic button">编辑</a>
<a href="#" th:href="@{/admin/types/{id}/delete(id=${type.id})}" class="ui mini red basic button">删除</a>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<th colspan="7">
<div class="ui mini pagination menu" >
<div class="item"><a th:href="@{/admin/types}">首页</a></div>
<div class="item"><a th:href="@{/admin/types(pagenum=${pageInfo.hasPreviousPage}?${pageInfo.prePage}:1)}">上一页</a></div>
<div class="item"><a th:href="@{/admin/types(pagenum=${pageInfo.hasNextPage}?${pageInfo.nextPage}:${pageInfo.pages})}">下一页</a></div>
<div class="item"><a th:href="@{/admin/types(pagenum=${pageInfo.pages})}">尾页</a></div>
</div>
<a href="#" th:href="@{/admin/types/input}" class="ui mini right floated teal basic button">新增</a>
</th>
</tr>
</tfoot>
</table>
<div class="ui segment m-inline-block">
<p >当前第<span th:text="${pageInfo.pageNum}"></span>页,总<span th:text="${pageInfo.pages}"></span>页,共<span th:text="${pageInfo.total}"></span>条记录</p>
</div>