GraphQL:了解Spring Data JPA / SpringBoot

本文探讨了GraphQL如何简化API设计,特别是在SpringBoot环境中。通过单一端点即可按需定制数据响应,避免了传统REST方法中冗余端点的创建。以员工信息查询为例,展示了如何灵活地请求特定字段,如姓名、地址等,从而提高数据处理效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GraphQL是API的查询语言。通常,在我们的API中创建REST端点时,通常的趋势是为需求创建端点。假设您的端点返回了一个员工列表,每个员工都有一般属性,例如姓名,年龄和地址(假设地址是映射到员工的另一个模型,每个员工都有一个地址)。现在,在某个时间点,您只需要数据用于其地址,即数据库中所有地址的列表(仅限国家,城市和街道)。为此,您需要在服务中使用全新的端点。

这就是GraphQL的强大功能,它允许您只处理单个端点,并根据请求的主体更改其输出。每个请求都将调用相同的端点,但使用不同的RequestBody。它只会收到它所需的结果。

请参阅代码在GitHub上的完整代码文件。这是一个带有H2数据库的maven项目,它在类路径中有data.sql用于数据库查询。此代码围绕从数据库中获取所有员工的列表。

现在,让我们从Spring Boot的实际实现开始。

我们有两个模型类:员工和地址以及相应的getter和setter。

@实体
@表
公共 类 员工 {
字符串 名称 ;
@ID
字符串 ID ;
INT 年龄 ;
@OneToOne(级联 = CascadeType的。ALL)
@JoinColumn(name = “addid”)
地址 地址 ;
//......getters and setters .... //
}

@实体
@表
公共 类 地址 {
@ID
@GeneratedValue
String addid ;
字符串 国家 ;
弦 城 ;
弦 平 ;
//......getters and setters .... //
}
为了实现存储库,我们将EmployeeRepo作为:

@Repository
公共 接口 EmployeeRepo 扩展了 CrudRepository < Employee,String > {

public List < Employee > findAll();

}
现在,GraphQL在类路径中需要一个.graphqls文件,它解析并理解它需要处理的请求类型。您将在代码中找到employee.graphqls。让我解释一下。

它包含:

类型 员工 {

....... 员工 详细信息

}

并 输入 地址 {

........ 地址 详情

}
在这里,我们定义了类的模式,它们将以某种方式作为对端点的响应返回,即它将返回所有员工,所有员工的地址,仅所有员工的姓名等。 。

我们还定义了:

类型 Query {

allEmployee:[ 员工 ]
}
查询类型(将由客户端发送或将出现在RequestBody中的查询)返回员工列表。

因此,RequestBody到我们的端点将包含一个root查询作为allEmployee。

我们在这里讨论请求:

1.要求所有员工没有地址的请求:

{
allEmployee {
名称

年龄

ID
}
}
2.仅要求员工姓名及其所属国家/地区的请求:

{
allEmployee {
名称
地址 {
国家
}
}

}
3.仅要求所有员工的地址的请求将是:

{
allEmployee {

地址 {
国家

            市
            平面
            ADDID

}
}

}

你可以使用 Spring Boot 来整合 JPAGraphQL。下面是一些步骤来实现这个目标: 1. 添加依赖:在你的项目的 `pom.xml` 文件中,添加以下依赖: ```xml <dependency> <groupId>com.graphql-java</groupId> <artifactId>graphql-spring-boot-starter</artifactId> <version>11.0</version> </dependency> <dependency> <groupId>com.graphql-java</groupId> <artifactId>graphql-java-tools</artifactId> <version>6.0.2</version> </dependency> <dependency> <groupId>com.graphql-java-kickstart</groupId> <artifactId>graphql-spring-boot-starter</artifactId> <version>10.0.1</version> </dependency> <dependency> <groupId>com.graphql-java-kickstart</groupId> <artifactId>graphiql-spring-boot-starter</artifactId> <version>10.0.1</version> </dependency> ``` 这些依赖将帮助你在 Spring Boot 中使用 GraphQL。 2. 创建 GraphQL Schema:创建一个类来定义你的 GraphQL Schema。你可以使用注解和类型来定义查询和数据模型。 ```java import com.coxautodev.graphql.tools.GraphQLQueryResolver; import org.springframework.stereotype.Component; @Component public class MyGraphQLQueryResolver implements GraphQLQueryResolver { private final UserRepository userRepository; public MyGraphQLQueryResolver(UserRepository userRepository) { this.userRepository = userRepository; } public List<User> getUsers() { return userRepository.findAll(); } } ``` 3. 创建 Repository 类:创建一个 JPA Repository 类来处理你的数据访问。 ```java import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface UserRepository extends JpaRepository<User, Long> { } ``` 4. 配置 GraphQL Endpoint:在你的 `application.properties` 或 `application.yml` 文件中添加以下配置: ```properties graphql.servlet.mapping=/graphql ``` 这将配置 GraphQL 的请求路径。 5. 启动应用程序:启动你的 Spring Boot 应用程序,并访问 `/graphql` 路径来执行 GraphQL 查询。 这是一个简单的示例,你可以根据你的需求来扩展和定制。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值