You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot使用PagingAndSortingRepository分页查询无返回结果问题排查

常见排查方向
  • 页码起始值不匹配(最高发)
    Spring Data 中PageRequest.of(page, size)的页码是从0开始计数的,如果前端传入的pageNum是按业务习惯从1开始取值,比如查询第一页传了pageNum=1,实际会查询第二页的数据。如果符合条件的总数据不足10条,第二页返回结果自然为空。
    验证方式:打印doctorPage.getTotalElements()的值,如果总条数大于0但getContent()为空,基本可以确定是页码传值问题,改成PageRequest.of(Integer.parseInt(pageNum)-1, 10)即可。
  • 查询条件匹配不符合预期
    1. 检查Doctor实体类的属性名是否为name,如果字段加了@Column映射,确认数据库字段名和方法名规则匹配:findAllByNameContaining生成的SQL是name like %?%,如果实际要匹配的字段是firstName之类的其他名称,会导致查询不到结果
    2. Containing默认大小写敏感,如果数据库大小写规则不匹配,也会出现查询为空的情况,需要忽略大小写可以改成findAllByNameContainingIgnoreCase
  • 返回值封装逻辑漏洞
    你当前代码把res.setSuccess(true)写在forEach遍历内部,如果查询结果为空,不会进入遍历逻辑,success字段会保留初始值(大概率是false),会误导你认为查询失败。应该把res.setSuccess(true)移到try块开头,只要没有抛出异常,查询动作本身就是成功的,有没有数据属于正常业务情况。
  • SQL执行验证
    在配置文件中添加spring.jpa.show-sql=true、spring.jpa.properties.hibernate.type.descriptor.sql.BasicBinder=TRACE,打印实际执行的SQL和绑定参数,把SQL复制到数据库客户端直接执行,确认是查询本身没有匹配数据,还是代码层处理的问题。
  • 简单单元测试排除层级问题
    直接注入DoctorPagingRepository做单元测试,固定传参PageRequest.of(0, 10)执行分页查询,排除Controller层参数解析、Service层调用的中间问题。

内容的提问来源于stack exchange,提问作者Zach

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 19:45:02