0

我是 Spring Boot 的新手,我刚开始将 graphql-spqr 用于 Spring Boot,因为它可以轻松引导 Java 项目。

但是,据我了解,GraphQL 基本上允许从数据库中获取选定的字段。根据示例,我已经看到,graphql-spqr 库中的这种选择发生在客户端。有没有办法在客户端和服务器端进行选择以加快查询速度?

我研究了 GraphQL 的 EntityGraph 示例,但它们主要是为涉及 JOIN 的复杂查询实现的。findAll()但是,对于诸如等的简单查询,什么都不存在findById()

我想findAll()与服务器一起使用,只获取客户端请求的字段。我怎样才能做到这一点?

4

1 回答 1

2

评论中所说的是正确的:GraphQL(以及因此的 SPQR,因为它只是一个连接模式的工具)对 SQL、数据库、JOIN 或其他任何东西一无所知。这是一个通信协议,其余的由你决定。至于您的情况,您必须将子选择注入解析器并将其传递给 SQL。在最简单的情况下,它看起来像这样(在伪代码中):

public List<Book> books(@GraphQLEnvironment Set<String> fields) {
    //pass the requested field names further
    return database.query("SELECT " + fields + " FROM book");
}

ResolutionEnvironment如果您需要完整的上下文,您可以使用相同的注释进行注入。

于 2021-04-19T08:39:37.477 回答