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

使用PageFactory.createOffsetBasedPage时如何提供总行数?

在Relay分页规范中添加总行数的实现方法

根据Relay分页规范,分页相关的元数据(比如总行数)确实需要定义在connection对象本身中,而非edges或pageInfo字段里。结合你参考的graphql-spqr示例,可按以下步骤实现:

  • 自定义你的Connection类型,新增totalCount字段用于存储总行数
  • 在数据查询逻辑中,同时执行分页数据查询和总记录数查询
  • 将总记录数注入Connection对象并返回

代码示例

  1. 定义包含totalCount的Connection类:
public class ProjectConnection {
    private List<ProjectEdge> edges;
    private PageInfo pageInfo;
    private Long totalCount; // 新增总行数字段

    // 全参构造方法
    public ProjectConnection(List<ProjectEdge> edges, PageInfo pageInfo, Long totalCount) {
        this.edges = edges;
        this.pageInfo = pageInfo;
        this.totalCount = totalCount;
    }

    // 对应的getter方法
    public List<ProjectEdge> getEdges() { return edges; }
    public PageInfo getPageInfo() { return pageInfo; }
    public Long getTotalCount() { return totalCount; }
}
  1. 修改查询方法,同时获取分页数据和总记录数:
public ProjectConnection findProjects(int first, String after) {
    // 1. 查询当前页的项目数据
    List<Project> paginatedProjects = projectRepository.findPaginated(first, after);
    // 2. 查询符合条件的项目总数
    Long totalCount = projectRepository.count();
    // 3. 组装edges列表
    List<ProjectEdge> edges = paginatedProjects.stream()
            .map(project -> new ProjectEdge(project, generateCursor(project)))
            .collect(Collectors.toList());
    // 4. 构建pageInfo
    PageInfo pageInfo = buildPageInfo(paginatedProjects, first, after);
    // 5. 返回包含总行数的Connection对象
    return new ProjectConnection(edges, pageInfo, totalCount);
}

GraphQL查询示例

之后你就可以在GraphQL查询中直接获取总行数:

query GetProjects {
  projects(first: 10) {
    edges {
      node {
        id
        name
      }
    }
    pageInfo {
      endCursor
      hasNextPage
    }
    totalCount # 获取总行数
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:17:38