在日常工作中怎么分页呢?咱们可以在sql里面拼接limit,但是这样是不是有点low,所以我又访问了一下伟大的百度,又知道了一个插件pagehelper,那么下面介绍一下pagehelper。
1.添加pom文件
首先在pom文件中加入依赖。同理版本方面可以访问官网。https://pagehelper.github.io/ 同时里面还有官方文档,想仔细研究的大佬可以去瞧瞧。
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<pagehelper.version>1.2.5</pagehelper.version>
</dependency>
2.编写controller
我们在controller中实现分页,首先判断前台是否传过来分页的入参,如果没有直接查询,如果PageNum,PageSize传了,直接使用 page = PageHelper.startPage()分页查询。也可以使用Long total = page.getTotal();获取总条数。
public Result<*>(*VO *VO) {
Result<*> resultVO = new Result<>();
// 分页
Page page = new Page();
if (!CommonUtil.isEmpty(*VO.getPageNum()) && !CommonUtil.isEmpty(*VO.getPageSize())) {
page = PageHelper.startPage(*VO.getPageNum(), *VO.getPageSize());
resultVO.setPageNum(*VO.getPageNum());
resultVO.setPageSize(*VO.getPageSize());
}
// ASC是根据id 正向排序,DESC是反向排序
if (!CommonUtil.isEmpty(*VO.getOrder())) {
PageHelper.orderBy(*VO.getOrder());
}
// 业务查询 只有这一句是业务查询!!!
List<*VO> result = *Service.query(*VO);
// 分页总数封装
Long total = page.getTotal();
resultVO.setTotal(total);
// 实体封装
resultVO.setData(result );
return resultVO;
}
这里有个坑,如果controller中有两个查询语句,那么第二个查询也会加上第一个的查询条件,如果有该情况,可以建立service,然后分别调用。
3.service层
很简单,没啥说的,普通的增删改查即可,这里不加以展示。#
4.配置类
需要在配置类中加入以下配置,helperDialect根据数据库类型修改。
pagehelper:
helperDialect: mysql
reasonable: true
supportMethodsArguments: true
params: count=countSql
然后我们直接调用接口就ok了,顺便说一下pagehelper是一种物理分页方式(拼接liimit到sql),会直接在数据库中查询出想要的数据,而不是全部查询出来,然后在内存中再次截取,所以效率是比较好的。