Springboot PageHelper实现后台分页
PageHelper
是一个很强大的分页插件,在Springboot
的项目中,如果后台突然需要改为分页返回,甚至无需更改过多代码即可获得分页的结果。
1. 前期代码准备
创建一个springboot
项目,配置数据库以及mybatis
,配置过程参考之前的文章。在pom.xml
中添加PageHelper
的依赖。创建User
实体,UserMapper
,以及UserService
。
User
public class User {
private int id;
private String name;
private String password;
public User(){}
public User(int id,String name,String password){
this.id = id;
this.name = name;
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
UserMapper
@Mapper()
public interface UserMapper {
@Select("select * from user")
List<User> selectUsers();
}
UserService
@Service
public class UserService {
@Autowired
UserMapper userMapper;
public List<User> getAllUserPage(){
return userMapper.selectUsers();
}
}
2. 使用PageHelper进行分页
在Controller中,在返回数据之前声明PageHelper
拦截器,然后返回PageInfo<>
@GetMapping(value = "/getUser")
public Object getUser(@RequestParam("pageNum") Integer pageNum,@RequestParam("pageSize") Integer pageSize){
if(pageNum==null||pageSize==null){
return "参数错误";
}
else{
//声明当前页数和每页大小
PageHelper.startPage(pageNum,pageSize);
//将结果包装到PageInfo中
return new PageInfo<>(userService.getAllUserPage());
}
}
使用postman
测试http://localhost:8080/getUser?pageNum=3&&pageSize=3
返回的数据格式如下所示:
{
"pageNum": 3, //当前页页数
"pageSize": 3, //每一页大小
"size": 2, //当前页大小(有多少条记录)
"startRow": 7, //当前页开始记录是数据库中的第几条记录
"endRow": 8, //当前页结束记录是数据库中的第几条记录
"total": 8, //一共有多少记录
"pages": 3, //一共有多少页
"list": [ //该分页返回的数据列表
{
"id": 7,
"name": "name7",
"password": "1231"
},
{
"id": 8,
"name": "name8",
"password": "123132"
}
],
"prePage": 2, //前面一页是第几页
"nextPage": 0, //后面一页是第几页(0表示没了)
"isFirstPage": false, //是否是第一页
"isLastPage": true, //是否是最后一页
"hasPreviousPage": true,//前面是否还有页
"hasNextPage": false, //后面是否还有页
"navigatePages": 8, //前端导航页展示页面数量 例如: 上一页 3 4 5 6 7 8 9 10 下一页
"navigatepageNums": [ //前端导航栏页码号列表
1,
2,
3
],
"navigateFirstPage": 1, //导航上第一页页号
"navigateLastPage": 3, //导航上最后一页是多少
"firstPage": 1, //第一页页号
"lastPage": 3 //最后一页页号
}
PageInfo
返回的数据非常全面,便于前端很好的编写控制导航栏的逻辑。
PageHelper
具体的实现原理在这里不再记录,有兴趣的同学可以参考这篇文章。