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

}
}

}

相關文章
相關標籤/搜索