GraphQL:了解Spring Data JPA / SpringBoot

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

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

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

如今,让咱们从Spring Boot的实际实现开始。code

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

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

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

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

public List < Employee > findAll();it

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

它包含:

类型 员工 {

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

}

并 输入 地址 {

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

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

咱们还定义了:

类型 Query {

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

所以,RequestBody到咱们的端点将包含一个root查询做为allEmployee。

咱们在这里讨论请求:

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

{
allEmployee {
名称

年龄

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

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

}
3.仅要求全部员工的地址的请求将是:

{
allEmployee {

地址 {
国家

市
            平面
            ADDID

}
}

}

相关文章
相关标签/搜索