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

Spring Data JPA:能否通过Pageable对象获取总页数?

解决Spring Data JPA中获取分页总页数的问题

嘿,这个场景我太熟悉了!先直接给你结论:Pageable对象本身是拿不到总页数的——它只是用来传递分页参数(比如页码、每页条数、排序规则)的载体,并不包含查询结果的统计信息。

那怎么才能拿到总页数呢?其实只需要改一下你的方法返回类型就行:把List<HotelPriceSummary>换成Page<HotelPriceSummary>,Spring Data JPA会自动帮你执行两次查询:一次是获取当前页的数据,另一次是统计符合条件的总记录数,最终返回的Page对象里就包含了总页数、总记录数等所有分页相关的元数据。

修改后的代码示例

@Query("select cps from HotelPriceSummary cps where cps.price > 5 and cps.profilePercentage >= 70 ")
Page<HotelPriceSummary> findMine(Pageable pageable);

调用示例

当你调用这个方法后,就可以轻松获取总页数了:

// 构造分页请求:第0页(页码从0开始),每页10条数据
Pageable pageable = PageRequest.of(0, 10);
Page<HotelPriceSummary> resultPage = hotelPriceSummaryRepository.findMine(pageable);

// 获取总页数
int totalPages = resultPage.getTotalPages();
// 还能拿到总记录数、当前页数据等
long totalElements = resultPage.getTotalElements();
List<HotelPriceSummary> currentPageData = resultPage.getContent();

额外说明

如果因为某些原因你确实不想返回Page类型,也可以自定义一个DTO来封装数据列表和总页数,或者使用Spring Data的Tuple返回结果,但这种方式需要手动编写统计总记录数的查询,反而不如直接用Page来得简洁高效。

内容的提问来源于stack exchange,提问作者Nunyet Calçada

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:59:22