我们在开发Web应用时,经常会使用到分页。
如果你也在用 MyBatis,建议尝试该分页插件pagehelper,这一定是最方便使用的分页插件。分页插件支持任何复杂的单表、多表分页。
官网地址:https://pagehelper.github.io/
我从github上的一个项目中,找到一个包装公共类。和另一个用于返回json格式的数据的公共类一起使用,效果更好。
关于返回JSON格式数据的公共类可以看用于Springboot项目中,控制层返回给前端的JSON格式的通用结果公共类CommonResult
CommonPage包装公共类
将pagehelper进行了包装
import com.github.pagehelper.PageInfo;
import java.util.List;
import org.springframework.data.domain.Page;
public class CommonPage<T> {
private Integer pageNum;
private Integer pageSize;
private Integer totalPage;
private Long total;
private List<T> list;
public CommonPage() {
}
public static <T> CommonPage<T> restPage(List<T> list, Long total) {
CommonPage<T> result = new CommonPage();
PageInfo<T> pageInfo = new PageInfo(list);
result.setTotalPage(pageInfo.getPages());
result.setPageNum(pageInfo.getPageNum());
result.setPageSize(pageInfo.getPageSize());
result.setTotal(total);
result.setList(pageInfo.getList());
return result;
}
public static <T> CommonPage<T> restPage(Page<T> pageInfo) {
CommonPage<T> result = new CommonPage();
result.setTotalPage(pageInfo.getTotalPages());
result.setPageNum(pageInfo.getNumber());
result.setPageSize(pageInfo.getSize());
result.setTotal(pageInfo.getTotalElements());
result.setList(pageInfo.getContent());
return result;
}
public Integer getPageNum() {
return this.pageNum;
}
public void setPageNum(Integer pageNum) {
this.pageNum = pageNum;
}
public Integer getPageSize() {
return this.pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public Integer getTotalPage() {
return this.totalPage;
}
public void setTotalPage(Integer totalPage) {
this.totalPage = totalPage;
}
public List<T> getList() {
return this.list;
}
public void setList(List<T> list) {
this.list = list;
}
public Long getTotal() {
return this.total;
}
public void setTotal(Long total) {
this.total = total;
}
}
主要使用其第一个静态方法CommonPage.restPage(List<T> list, Long total)
。
入口参数分别是要返回的对象列表,和总页数。
添加依赖
我们要使用pagehelper以及这个CommonPage类,需要在pom.xml中添加以下依赖
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
<version>2.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.1</version>
</dependency>
注意,对于pagehelper需要添加github第三方的spring-boot-starter依赖。这样可以减少一些配置。如果直接添加的是github的pagehelper依赖,则需要写配置信息。
使用
我们在一个Contoller类中来使用,示例代码如下:
@RequestMapping(value = "/select", method = RequestMethod.GET)
@ResponseBody
public CommonResult<CommonPage<School>> list( @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum){
Page page = PageHelper.startPage(pageNum, pageSize);
List<School> list = schoolService.getSchools();
Long pageTotal=page.getTotal();
return CommonResult.success(CommonPage.restPage(list,pageTotal));
}
测试
我们打开浏览器,输入请求
http://localhost:8082/losefinder/select?pageSize=10&pageNum=2