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

QueryDSL 5.0.0中JPAQuery.fetchResults()已弃用,该用什么方法替代实现分页?

QueryDSL 5.0.0 分页查询替代fetchResults()方案

QueryDSL 5.x 版本废弃JPAQuery.fetchResults()以及配套的fetchCount()方法,核心原因是两个方法自动生成的count查询逻辑通用性差,在多表关联、分组聚合等复杂场景下容易生成错误的统计SQL,官方推荐手动拆分查询实现分页逻辑。

基础实现步骤

  • 首先根据业务需求定义分页参数:页码偏移量offset和单页数据条数limit
  • 编写原业务查询语句,调用offset()、limit()方法设置分页参数后执行fetch()获取当前页数据列表
  • 基于相同的查询条件,单独编写count统计查询获取符合条件的总数据条数
  • 自行封装总条数、当前页数据返回分页结果即可

代码示例

import static com.example.entity.QUser.user; // 替换为你自己的查询实体路径

// 分页参数示例:查询第1页,每页10条数据
int pageNum = 1;
int pageSize = 10;
long offset = (pageNum - 1) * pageSize;

// 1. 查询当前页数据列表
List<User> userList = queryFactory.selectFrom(user)
        .where(user.age.gt(18), user.status.eq(1)) // 替换为你的业务查询条件
        .offset(offset)
        .limit(pageSize)
        .fetch();

// 2. 单独查询符合条件的总条数
Long total = queryFactory.select(user.count())
        .from(user)
        .where(user.age.gt(18), user.status.eq(1)) // 和业务查询条件保持一致
        .fetchOne();
total = total == null ? 0 : total;

Spring Data JPA 整合场景简化方案

如果你是和Spring Data JPA 整合使用QueryDSL,可以让你的Repository接口继承QuerydslPredicateExecutor<T>接口,直接调用内置的findAll(Predicate predicate, Pageable pageable)方法,框架会自动执行分页查询和总数统计,直接返回包含完整分页信息的Page<T>对象,不需要手动拆分两次查询。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:00:03