使用 Spring Data JPA 從資料庫表中選擇特定列

banq發表於2021-11-09

在某些情況下,我們只需要檢索實體的選定屬性。本教程解釋瞭如何以不同的方式實現這一目標。

一個 API 返回包含所有屬性的所有客戶的列表。但通常情況下,不需要獲取所有屬性。從資料庫中只檢索所需的資料始終是一個好習慣。這樣做的主要原因是為了提高應用程式的效能。下面,我將展示如何以不同的方式從資料庫中僅檢索一組特定的資料。

 

1. 只選擇一個實體的一個屬性

該應用程式公開一個端點,該端點僅返回客戶的電話號碼。當只需要一個屬性(欄位)時,在儲存庫介面中建立自定義方法。此方法使用@Query 註釋進行註釋。這個註解有一個自定義的 JPQL 語句,它只選擇指定的屬性。

@Query("SELECT phoneNumber FROM CustomerEntity customer") 
List<String> findPhoneNumbers();

 

2. 使用自定義 DTO 物件選擇實體的特定屬性

大多數時候我們需要返回一個實體的多個屬性。該應用程式的 API 僅返回客戶的全名和地址。類 (DTO) 是使用選定的欄位和接受這些欄位作為引數的建構函式建立的。儲存庫介面中的自定義方法返回使用此類建立的物件列表。該方法有一個@Query 註釋。此註釋有一個 JPQL 查詢,該查詢從具有選定欄位的自定義類建立物件。欄位被傳遞給這個類的建構函式。必須在查詢中指定完全限定的類名。

@Query("SELECT new com.polovyi.ivan.tutorial.entity.dto.MailingAddressDTO (fullName, address) FROM CustomerEntity customer") 
List<MailingAddressDTO> findMailingAddresses();

 

3. 使用基於介面的投影選擇實體的特定屬性

檢索多個屬性的另一種選擇是使用基於介面的投影。在這種情況下,介面是使用訪問器方法建立的,用於要檢索的屬性。一個示例應用程式有一個 API,它返回每個客戶的全名和工作。該 API 呼叫儲存庫,該儲存庫返回從實現上述介面的類建立的物件列表。Spring 會“即時”處理這個問題。然後在這個方法的@Query註解中,指定了JPQL查詢。確保對欄位使用別名,因為沒有它們將無法工作。

@Query("SELECT fullName AS fullName, customer.job AS job FROM CustomerEntity customer") 
List<CustomerJobProjection> findAllJobs();

結論

應用程式的效能非常重要。每個開發人員都必須優化應用程式,使其快速高效。許多方法之一是最小化應用程式和資料庫之間的資料傳輸。它可以通過使用本教程中解釋的技術來實現。

 

相關文章