pagehelper 分页不生效,是因为需要2个架包

博客介绍了在Java项目中,通过在pom.xml添加架包,还给出了Service层代码。涉及Java、Spring及Spring Boot相关技术。

 pom.xml 添加架包

<dependency>
   <groupId>com.github.pagehelper</groupId>
   <artifactId>pagehelper-spring-boot-starter</artifactId>
   <version>1.2.13</version>
</dependency>
<dependency>
   <groupId>com.github.pagehelper</groupId>
   <artifactId>pagehelper</artifactId>
   <version>5.1.11</version>
</dependency>

Service层代码如下

    @Override
    public PageInfo<StudentReportVo> queryStudentReports(StudentReportQo query){
        PageHelper.startPage(query.getPageNum(), query.getPageSize());
        List<StudentReportVo> reports = baseMapper.queryStudentReports(query);
        return new PageInfo<>(reports);
    }

调试 `PageHelper` 分页不生效的问题,关键是确认 `PageHelper.startPage()` 是否被正确拦截并作用于目标 SQL 查询。以下是详细的调试方法和步骤。 --- ### ✅ 1. 确认 PageHelper 被正确引入 确保你的项目中引入了 PageHelper 的依赖,例如在 `pom.xml` 中: ```xml <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.4.2</version> </dependency> ``` --- ### ✅ 2. 确保 `PageHelper.startPage()` 是紧跟的第一个查询 ```java PageHelper.startPage(pageNum, pageSize); List<Entity> list = yourMapper.selectAll(); // 必须紧跟 ``` > ⚠️ 如果中间有其他 SQL 查询、日志打印、业务逻辑等操作,PageHelper 可能失效。 --- ### ✅ 3. 打印 SQL 日志(推荐使用 MyBatis-Plus 或 Logback) #### 使用 `application.yml` 配置日志输出 ```yaml logging: level: com.your.package.mapper: debug ``` 这样你就能在控制台看到实际执行的 SQL,确认是否带有 `LIMIT`。 #### 示例输出: ```sql ==> Preparing: SELECT * FROM ads_ent_base_info_nanshan WHERE dom_code LIKE ? ==> Parameters: %123456%(String) <== Columns: id, dom_code, name, ... <== Row: 1, 123456, "Company A", ... <== Total: 10 ``` 如果看到 `LIMIT` 或 `ROWNUM`,说明分页生效;否则说明未生效。 --- ### ✅ 4. 使用 `PageInfo` 获取分页信息进行验证 ```java List<AdsEntBaseInfoNanshan> list = commercialEntityService.selectLikeDomCode(buildingCode); PageInfo<AdsEntBaseInfoNanshan> pageInfo = new PageInfo<>(list); System.out.println("当前页码: " + pageInfo.getPageNum()); System.out.println("每页数量: " + pageInfo.getPageSize()); System.out.println("总记录数: " + pageInfo.getTotal()); System.out.println("总页数: " + pageInfo.getPages()); ``` --- ### ✅ 5. 使用断点调试 在如下位置打断点: ```java PageHelper.startPage(pageNum, pageSize); List<AdsEntBaseInfoNanshan> list = commercialEntityService.selectLikeDomCode(buildingCode); ``` 查看 `list` 的大小是否是预期的分页大小(如 pageSize=10,返回的 list 是否是 10 条数据)。 --- ### ✅ 6. 检查 SQL 是否是动态 SQL 或嵌套查询 如果 SQL 是动态拼接的,或者有子查询、union 等复杂结构,PageHelper 可能无法正确识别。 建议: - 简化 SQL,测试是否分页生效。 - 使用 `PageHelper.offsetPage()` 替代 `PageHelper.startPage()`。 - 使用 `PageHelper.clearPage()` 清除上下文。 --- ### ✅ 7. 检查是否使用了 `Page` 类型作为返回值 PageHelper 有时会自动封装为 `Page` 类型对象,比如: ```java Page<AdsEntBaseInfoNanshan> page = commercialEntityService.selectLikeDomCode(buildingCode); ``` 你可以直接从 `page.getTotal()` 和 `page.size()` 获取信息。 --- ### ✅ 8. 使用 `PageHelper` 工具类验证分页状态 ```java Page<AdsEntBaseInfoNanshan> page = PageHelper.getLocalPage(); if (page != null) { System.out.println("当前页: " + page.getPageNum()); System.out.println("每页数量: " + page.getPageSize()); } ``` --- ### ✅ 9. 使用 `PageInterceptor` 手动添加日志拦截器 你可以自定义一个拦截器,打印每次分页的上下文: ```java @Intercepts({@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})}) public class PageInterceptor implements Interceptor { @Override public Object intercept(Invocation invocation) throws Throwable { // 打印分页信息或 SQL return invocation.proceed(); } @Override public Object plugin(Object target) { return Plugin.wrap(target, this); } @Override public void setProperties(Properties properties) {} } ``` --- ### ✅ 10. 检查是否是多数据源问题 如果你使用了多数据源(如 Dynamic-Datasource),PageHelper 可能只对默认数据源生效。 解决办法: - 在配置中启用 PageHelper 的多数据源支持。 - 或者使用 `PageHelper.startPage().doSelectPageInfo(() -> mapper.select(...))` 函数式调用。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值