Spring?Data?JPA命名約定查詢實現方法
很笨的實現
假設我只要需要最后三條數據,如下是我的實現方法,這是一個很笨的實現,因為這個操作是真的很冗余,這個是請求到了全部,在進行降序排序,然后在截取前面三條數據。
// 創(chuàng)建一個 Sort 對象,表示按照 ID 降序排列 Sort sort = Sort.by(Sort.Direction.DESC, "id"); List<Rank> allRanks = this.rankRepository.findAll(sort); int size = allRanks.size(); if (size > 3) { allRanks = allRanks.subList(0, 3); }
Sort.Direction.DESC 按降序排序,desc 是descend的縮寫
Sort.Direction.ASC 按升序排序,asc 是ascend的縮寫
JpaRepository
根據上面操作,起碼寫了六行代碼,我只需要使用命名約定查詢findTop3ByOrderByIdDesc()這個方法jpa會根據這個方法名稱返回前面三條數據。
在前面已經繼承JpaRepository接口。JpaRepository接口又繼承了四個接口PagingAndSortingRepository、CrudRepository、Repository、QueryByExampleExecutor,看到接口繼承關系圖如下:
從上圖中我們可以看到兩種線,虛線和帶箭頭的實線。
- 實線帶箭頭: 通常表示繼承關系。在繼承關系中,子類繼承了父類的屬性和方法。實線箭頭的方向指向父類,表示子類是從父類繼承而來。
- 虛線: 通常表示關聯或依賴關系。在關聯關系中,一個類與另一個類有某種關聯,但不一定是繼承關系。虛線箭頭的方向通常表示關聯的方向,即其中一個類依賴于另一個類。
繼承四個接口的作用
- Repository接口:提供了基本的 CRUD 操作,是倉庫接口層次結構的最頂層。
- CrudRepository接口:CrudRepository 是繼承自 Repository 接口的子接口,提供了基本的 CRUD 方法,包括保存、查詢、更新和刪除。
- PagingAndSortingRepository接口:PagingAndSortingRepository 是繼承自 CrudRepository 接口的子接口。
- QueryByExampleExecutor 接口:支持基于實例的動態(tài)查詢的方法、允許你通過傳遞一個示例對象來執(zhí)行查詢,而不需要手動編寫查詢語句。
如何使用命名約定查詢
Spring Data JPA提供的方法命名規(guī)則定義方法的名稱,就可以完成查詢工作。程序執(zhí)行的時候會根據方法名稱進行解析,并自動生成sql語句進行查詢。
規(guī)則如下:
1.findBy + 屬性名稱 (根據屬性名稱進行完成匹配的查詢=)findByName
2.findBy + 屬性名稱 + “查詢方式(Like | isnull)” findByNameLike
3.多條件查詢
findBy + 屬性名 + “查詢方式” + “多條件的連接符(and|or)” + 屬性名 + “查詢方式” 既 findByWeekReportIdAndVoteUserId
Sample
public class Vote extends BaseEntity<Long> { @ManyToOne private User voteUser; @ManyToMany private List<VoteDetail> voteDetails; @ManyToOne private WeekReport weekReport; }
實現查詢:
List<Vote> votesFind = voteRepository.findAll(); List<Vote> votes = voteRepository.findByWeekReportIdAndVoteUserId(1L, 1L);
這樣就實現多條件查詢了,我想如果我不知道這個命名約定查詢之前肯定會,先全部請求到數據,然后一個個for if去對比數據,最后才拿到我想要的數據。
總結
使用命名約定查詢,減少錯誤的發(fā)生,提高開發(fā)效率,簡化查詢語句的編寫;這樣也使得代碼更具有易讀性,而且只需要定義方法的命名即可。
參考
官網地址:https://springdoc.cn/spring-data-jpa/#repositories.namespace-...
以上就是Spring Data JPA命名約定查詢實現方法的詳細內容,更多關于Spring Data JPA命名約定查詢的資料請關注腳本之家其它相關文章!
相關文章
SpringBoot + Spring Cloud Consul 服務注冊和發(fā)現詳細解析
這篇文章主要介紹了SpringBoot + Spring Cloud Consul 服務注冊和發(fā)現,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07MyBatis-Plus如何通過注解使用TypeHandler
這篇文章主要介紹了MyBatis-Plus如何通過注解使用TypeHandler,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01