1.前言
在开发过程中,经常会遇到分页查询的需求,为了解决这一问题,今天我带大家了解一下Mybatis的一款分页插件pagehelper,个人感觉用起来是非常实用和简单的,有感兴趣的可以深入了解一下。
2.pagehelper分页插件
2.1 引入分页插件依赖
<!--pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.12</version>
</dependency>
2.2 配置yml
# 分页插件配置
pagehelper:
helperDialect: mysql
supportMethodsArguments: true
2.3 自定义PagedGridResult类
在common子项目中创建PagedGridResult类,用于封装分页查询结果,响应给前端去处理。
import java.util.List;
/**
* @Description: 用来返回分页Grid的数据格式
*/
public class PagedGridResult {
private int page; // 当前页数
private int total; // 总页数
private long records; // 总记录数
private List<?> rows; // 每行显示的内容
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public long getRecords() {
return records;
}
public void setRecords(long records) {
this.records = records;
}
public List<?> getRows() {
return rows;
}
public void setRows(List<?> rows) {
this.rows = rows;
}
}
2.4 自定义PageUtil类
在common子项目中创建PageUtil工具类,用于将查询结果list快速封装成为PagedGridResult对象。
import java.util.List;
/**
* 将分页查询后的结果处理成PagedGridResult对象,然后返回
*/
public class PageUtil {
public static PagedGridResult setPagedGrid(List<?> list, Integer page){
PageInfo<?> pageList = new PageInfo<>(list);
PagedGridResult grid = new PagedGridResult();
grid.setPage(page);
grid.setRows(list);
grid.setTotal(pageList.getPages());
grid.setRecords(pageList.getTotal());
return grid;
}
}
3.举例与使用
3.1 service层代码
import com.github.pagehelper.PageHelper;
import com.htf.common.response.PagedGridResult;
import com.htf.common.utils.PageUtil;
import com.htf.mapper.CarouselMapper;
import com.htf.pojo.Carousel;
import com.htf.service.CarouselService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class CarouselServiceImpl implements CarouselService {
@Autowired
private CarouselMapper carouselMapper;
@Override
public PagedGridResult getCarouselAll(Integer page, Integer pageSize) {
PageHelper.startPage(page,pageSize);
List<Carousel> carouselList= carouselMapper.selectAll();
PagedGridResult pagedGridResult = PageUtil.setPagedGrid(carouselList, page);
return pagedGridResult;
}
}
3.2 controller层代码
@PostMapping("/list")
@ApiOperation(value = "分页查询Carousel", notes = "分页查询Carousel的相关API", httpMethod = "POST")
public PagedGridResult list(
@RequestParam("page")
@ApiParam(name = "page", value = "分页的当前页", required = true)
Integer page,
@RequestParam("pageSize")
@ApiParam(name = "pageSize", value = "每页显示多少条数据", required = true)
Integer pageSize){
PagedGridResult result = carouselService.getCarouselAll(page, pageSize);
return result;
}
3.3 调用list接口,查看响应结果
启动你的程序,利用PostMan软件调试list接口,查看响应结果。
响应的json格式数据如下:
{
"page": 1,
"total": 2,
"records": 4,
"rows": [
{
"id": "c-10011",
"imageUrl": "http://122.152.205.72:88/group1/M00/00/05/CpoxxF0ZmG-ALsPRAAEX2Gk9FUg848.png",
"backgroundColor": "#f44661",
"itemId": "nut-1004",
"catId": "",
"type": 1,
"sort": 1,
"isShow": 1,
"createTime": "2019-08-27T12:33:06.000+0000",
"updateTime": "2019-08-24T12:33:09.000+0000"
},
{
"id": "c-10013",
"imageUrl": "http://122.152.205.72:88/group1/M00/00/05/CpoxxF0ZmHiAWwR7AAFdqZHw8jU876.png",
"backgroundColor": "#000240",
"itemId": "",
"catId": "51",
"type": 2,
"sort": 2,
"isShow": 1,
"createTime": "2019-08-25T12:33:06.000+0000",
"updateTime": "2019-08-25T12:33:09.000+0000"
}
]
}
这样前端根据后端返回的json数据,作出响应的处理,将数据渲染到html界面上。
关注我,持续更新springboot系列。