Spring Boot 集成 PageHelper 分页插件
PageHelper是一款MyBatis的分页插件,通过拦截器实现了分页功能。它可以在不修改代码的情况下,实现物理分页,大大提高了开发效率。PageHelper支持多种数据库,如MySQL、Oracle、SQL Server等。
1.添加依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
2.配置PageHelper
pagehelper:
helper-dialect: mysql
reasonable: true
support-methods-arguments: true
params: count=countSql
3.测试
3.1返回PageInfo
> ProblemServiceImpl
public Result getProblemList(Integer pageNum, Integer pageSize, Integer collectionId, String level) {
if (pageNum < 1 || pageSize > 5) {
return Result.fail("Illegal parameters");
}
PageHelper.startPage(pageNum, pageSize);
List<Problem> problems = problemMapper.queryProblemListByColAndLevel(collectionId, level);
PageInfo<Problem> pageInfo = new PageInfo<>(problems);
return Result.success(pageInfo);
}
结果
{
"code": 0,
"msg": "Operation successful",
"data": {
"total": 4,
"list": [
{
"id": 1,
"title": "两数之和",
"level": "简单",
"collectionId": null,
"description": null,
"templateCode": null,
"createTime": null,
"updateTime": null
},{
...
}
],
"pageNum": 1,
"pageSize": 5,
"size": 4,
"startRow": 1,
"endRow": 4,
"pages": 1,
"prePage": 0,
"nextPage": 0,
"isFirstPage": true,
"isLastPage": true,
"hasPreviousPage": false,
"hasNextPage": false,
"navigatePages": 8,
"navigatepageNums": [
1
],
"navigateFirstPage": 1,
"navigateLastPage": 1
}
}
3.1返回PageBean
> PageBean
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageBean<T> {
private Long total;
private List<T> items;
}
> ProblemServiceImpl
public Result getProblemList(Integer pageNum, Integer pageSize, Integer collectionId, String level) {
if (pageNum < 1 || pageSize > 5) {
return Result.fail("Illegal parameters");
}
PageHelper.startPage(pageNum, pageSize);
List<Problem> problems = problemMapper.queryProblemListByColAndLevel(collectionId, level);
Page<Problem> page = (Page<Problem>) problems;
return Result.success(new PageBean<>(page.getTotal(), page.getResult()));
}
结果
{
"code": 0,
"msg": "Operation successful",
"data": {
"total": 4,
"items": [
{
"id": 1,
"title": "两数之和",
"level": "简单",
"collectionId": null,
"description": null,
"templateCode": null,
"createTime": null,
"updateTime": null
},{
...
}
]
}
}