PageHelper官方地址
在项目开发中,我们经常会遇到有关分页的问题,当我们使用Mybatis进行数据库操作时,使用pagehelper帮助我们进行分页是极其的简单。
那么pagehelper如何搭配SpringBoot使用,这就是接下来要解决的问题。
1、添加Maven依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
如果你想要最新的版本,可以去官方地址获取相应的依赖版本。
2、查询数据库
@Repository
@Mapper
public interface TopicDao {
/**
* 查询所有
* @return
*/
@Select("SELECT * FROM xt_topic")
List<Topic> findAllTopic();
}
这与你单独使用Mybatis不进行分页的查询一致,无需修改。
2、使用PageHelper分页
/**
*
* @param pageNum 当前页
* @param pageSize 页的大小
* @return
*/
public Result findAllTopicByPage(int pageNum, int pageSize) {
Result result = new Result();
PageHelper.startPage(pageNum, pageSize);
try {
List<Topic> topicList = topicDao.findAllTopic();
PageInfo<Topic> pageInfo = new PageInfo<Topic>(topicList);
result.setCode(StatusCode.OK);
result.setMessage("查询成功!");
// result.setData(topicList);
result.setData(pageInfo);
return result;
}catch (Exception e){
e.printStackTrace();
result.setFlag(false);
result.setMessage("出错了!");
return result;
}
}
上面代码中,Result相关的代码与PageHelper无关。PageHelper相关的代码主要是 PageHelper.startPage(pageNum, pageSize);
,执行了这句代码之后,再调用findAllTopic方法进行查询,获取到的结果就是分页后的List——包含pageSize个Topic的List。
[
{
"tpId": 1,
"tpAuthor": "XXX",
"tpTitle": "你好,四月",
"tpContent": "新的一个月,安好。",
"createTime": "2021-03-12T03:09:02.000+00:00",
"updateTime": "2021-03-12T03:09:02.000+00:00"
},
{
"tpId": 2,
"tpAuthor": "XXX",
"tpTitle": "你好,五月",
"tpContent": "新的一个月,安好。",
"createTime": "2021-03-12T03:17:31.000+00:00",
"updateTime": "2021-03-12T03:17:31.000+00:00"
},
{
"tpId": 3,
"tpAuthor": "XXXX",
"tpTitle": "你好,五月",
"tpContent": "新的一个月,安好。",
"createTime": "2021-03-13T02:51:13.000+00:00",
"updateTime": "2021-03-13T02:51:13.000+00:00"
},
{
"tpId": 4,
"tpAuthor": "XXXX",
"tpTitle": "你好,五月",
"tpContent": "新的一个月,安好。",
"createTime": "2021-03-13T02:51:13.000+00:00",
"updateTime": "2021-03-13T02:51:13.000+00:00"
}
]
如果使用PageInfo进行分页的封装,那么需要执行PageInfo<Topic> pageInfo = new PageInfo<Topic>(topicList);
。
"total": 12,
"list": [
{
"tpId": 1,
"tpAuthor": "XXX",
"tpTitle": "你好,四月",
"tpContent": "新的一个月,安好。",
"createTime": "2021-03-12T03:09:02.000+00:00",
"updateTime": "2021-03-12T03:09:02.000+00:00"
},
{
"tpId": 2,
"tpAuthor": "XXX",
"tpTitle": "你好,五月",
"tpContent": "新的一个月,安好。",
"createTime": "2021-03-12T03:17:31.000+00:00",
"updateTime": "2021-03-12T03:17:31.000+00:00"
},
{
"tpId": 3,
"tpAuthor": "XXXX",
"tpTitle": "你好,五月",
"tpContent": "新的一个月,安好。",
"createTime": "2021-03-13T02:51:13.000+00:00",
"updateTime": "2021-03-13T02:51:13.000+00:00"
},
{
"tpId": 4,
"tpAuthor": "XXXX",
"tpTitle": "你好,五月",
"tpContent": "新的一个月,安好。",
"createTime": "2021-03-13T02:51:13.000+00:00",
"updateTime": "2021-03-13T02:51:13.000+00:00"
}
],
"pageNum": 1,
"pageSize": 4,
"size": 4,
"startRow": 1,
"endRow": 4,
"pages": 3,
"prePage": 0,
"nextPage": 2,
"isFirstPage": true,
"isLastPage": false,
"hasPreviousPage": false,
"hasNextPage": true,
"navigatePages": 8,
"navigatepageNums": [
1,
2,
3
],
"navigateFirstPage": 1,
"navigateLastPage": 3
两者的区别就是PageInfo封装后,会帮助我们添加更多的信息。而如果不使用PageInfo进行封装,那得到的就仅仅是一个List。