SpringBoot整合PageHelper
PageHelper官方地址在项目开发中,我们经常会遇到有关分页的问题,当我们使用Mybatis进行数据库操作时,使用pagehelper帮助我们进行分页是极其的简单。那么pagehelper如何搭配SpringBoot使用,这就是下面我要解决的问题。1、添加Maven依赖<dependency><groupId>com.github.pagehelper</grou
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、添加application.yml配置
pagehelper:
helper-dialect: mysql
reasonable: true
support-methods-arguments: true
3、查询数据库
@Repository
@Mapper
public interface TopicDao {
/**
* 查询所有
* @return
*/
@Select("SELECT * FROM xt_topic")
List<Topic> findAllTopic();
}
这与单独使用Mybatis不进行分页的查询一致,无需修改。
4、使用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);
,执行PageHelper.startPage(pageNum, pageSize);
之后,再调用findAllTopic方法进行查询,返回的结果就是分页后的List——pageNum页的,包含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。
3、进一步了解PageHelper
pageNum=1,pageSize=4
pageNum=2,pageSize=4
pageNum=3,pageSize=2
观察以上的信息,PageHelper对原有的Sql语句进行了修改,加入了LIMIT关键字进行分页操作,这与自行编写分页语句的代码一致。当pageNum=1时,仅有一个占位符,参数的值,就是pageSize。当pageNum>1时,第一个参数代表LIMIT的起始值,第二个参数代表pageSize。
有趣的是,当配置了 reasonable: true
时,如果你的pageNum<1时,会查询第一页。如果pageNum>最大的页码数时,会查询最后一页。
pageNum=-1,pageSize=2
pageNum=100,pageSize=2
更多推荐
所有评论(0)