SpringBoot整合PageHelper

本文介绍如何在SpringBoot项目中使用PageHelper实现Mybatis分页功能。通过添加依赖、配置属性及编写DAO层代码,轻松完成分页查询。并探讨PageHelper内部原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

要在SpringBoot项目中整合PageHelper,你可以按照以下步骤进行: 1. **添加Maven依赖**[^1]: 在`pom.xml`文件中添加`pagehelper-spring-boot-starter`依赖,如示例所示: ```xml <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency> ``` 2. **简化依赖管理**[^2]: PageHelper-SpringBoot Starter已经包含了必要的依赖,不需要手动导入其他PageHelper库。只需上述依赖即可。 3. **配置SpringBoot**: 在`application.properties`或`application.yml`中加入PageHelper的配置,例如设置分页参数: ```properties mybatis.mapper-page-size=10 mybatis.mapper-params='{"pageNum": #{pageNum}, "pageSize": #{pageSize}}"' ``` 4. **编写Mapper接口**: 使用PageHelper的注解`@Page`来标注分页查询方法,例如: ```java @Select("SELECT * FROM table LIMIT #{limit} OFFSET #{offset}") List<YourEntity> selectWithPage(@Param("limit") int limit, @Param("offset") int offset); ``` 5. **调用分页API**: 在Service层调用Mapper接口并传递分页参数,例如: ```java YourService service = new YourServiceImpl(); PageHelper.startPage(pageNum, pageSize); // 分页开始 List<YourEntity> entities = service.selectWithPage(pageSize, (pageNum - 1) * pageSize); PageHelper.endPage(); // 分页结束 ``` 6. **注意事项**: - 如果遇到SQL未使用LIMIT的问题,可能是因为PageHelper需要MyBatis 3.4.0+的支持。 - 定期查看官方GitHub仓库(GitHub - pagehelper/pagehelper-spring-boot)了解最新版本兼容情况和更新信息。 关于PageHelper的选择理由[^3]: - PageHelper提供了简洁的分页API,易于理解和使用。 - 可以直接与MyBatis集成,无需额外复杂的配置。 - 支持动态分页和预加载,提高性能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值