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
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐