题
外话:上次博文因为一个可恶的bug鸽了,直接开摆三天,看到粉丝竟然到了66这么一个吉利的数字,激情开更。
尽量每步代码都详尽,请放心食用。
接上篇(http://t.csdnimg.cn/Y8T26),带大家实现了基本查询,我们依旧使用ebook这张表实现增删改分页查询的功能
分页查询
这是一个非常常见的需求,我们随便打开一个页面基本都有页码,我们可以进行翻页的动作。
我们拿到100条数据,每页10条,分成10页。可以看到这句话有三个数据,总条数,页数和每页条数,我们知道总条数和每页条数就可以知道页数,可是还有一个问题,我们怎么知道我们处于第几页?所以页数不重要,当前页码反而重要。
我们分页查询只需要前端传来两个参数当前页码和每页条数,就可以查出当前页的数据,我们思考可能多个页面都要分页的需求,那么我们就可以将这个分页类作为其他参数请求类的父类
分页类源码如下
public class PageReq {
private int page;
private int size;
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
@Override
public String toString() {
return "PageReq{" +
"page=" + page +
", size=" + size +
'}';
}
}
我们让EbookQueryReq(上篇博客的EbookReq改了名字)继承它,相等于我们现在的请求参数加了两个,页码和每页条数。我们只需要在Service层稍加改变。我们在Pom文件引入PageHelper依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.13</version>
</dependency>
只要我们向PageHelper的startPage提供两个参数(页码和每页条数),PageHelper会自动帮我们完成分页功能。页码最小为1,PageHelper还内置了一个PageInfo类,能够得到总条数和总页数。
//分页从1开始,只对下面第一个查询语句有效
PageHelper.startPage(req.getPage(),req.getSize());
List<Ebook> ebookList = EbookMapper.selectByExample(ebookExample);
PageInfo<Ebook> pageInfo=new PageInfo<>(ebookList);
LOG.info("总条数:{}",pageInfo.getTotal());
LOG.info("总页数:{}",pageInfo.getPages());
我们思考一个问题,如果我们给前端返回的数据还是原来的数据,那么前端只知道一个每页条数是不是依旧没法分页,因此我们还需要返回一个总条数。而我们就需要将这个总条数塞到返回参数里。同样的,既然我们需要对每个页面进行分页,那么总条数这个返回参数就必不可少,我们依然需要让他成为父亲般的存在,因为总条数并不属于查询列表中的数据,所以我们不采用之前的继承,而是我们让这个查询列表的参数成为它的一部分,创建一个新类PageResp,参数即为返回参数类。
public class Pa