Spring?Data?JPA命名約定查詢實現(xiàn)方法
很笨的實現(xiàn)
假設我只要需要最后三條數(shù)據(jù),如下是我的實現(xiàn)方法,這是一個很笨的實現(xiàn),因為這個操作是真的很冗余,這個是請求到了全部,在進行降序排序,然后在截取前面三條數(shù)據(jù)。
// 創(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
根據(jù)上面操作,起碼寫了六行代碼,我只需要使用命名約定查詢findTop3ByOrderByIdDesc()這個方法jpa會根據(jù)這個方法名稱返回前面三條數(shù)據(jù)。

在前面已經(jīng)繼承JpaRepository接口。JpaRepository接口又繼承了四個接口PagingAndSortingRepository、CrudRepository、Repository、QueryByExampleExecutor,看到接口繼承關系圖如下:

從上圖中我們可以看到兩種線,虛線和帶箭頭的實線。
- 實線帶箭頭: 通常表示繼承關系。在繼承關系中,子類繼承了父類的屬性和方法。實線箭頭的方向指向父類,表示子類是從父類繼承而來。
- 虛線: 通常表示關聯(lián)或依賴關系。在關聯(lián)關系中,一個類與另一個類有某種關聯(lián),但不一定是繼承關系。虛線箭頭的方向通常表示關聯(lián)的方向,即其中一個類依賴于另一個類。
繼承四個接口的作用
- Repository接口:提供了基本的 CRUD 操作,是倉庫接口層次結構的最頂層。
- CrudRepository接口:CrudRepository 是繼承自 Repository 接口的子接口,提供了基本的 CRUD 方法,包括保存、查詢、更新和刪除。
- PagingAndSortingRepository接口:PagingAndSortingRepository 是繼承自 CrudRepository 接口的子接口。
- QueryByExampleExecutor 接口:支持基于實例的動態(tài)查詢的方法、允許你通過傳遞一個示例對象來執(zhí)行查詢,而不需要手動編寫查詢語句。
如何使用命名約定查詢
Spring Data JPA提供的方法命名規(guī)則定義方法的名稱,就可以完成查詢工作。程序執(zhí)行的時候會根據(jù)方法名稱進行解析,并自動生成sql語句進行查詢。
規(guī)則如下:
1.findBy + 屬性名稱 (根據(jù)屬性名稱進行完成匹配的查詢=)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;
}實現(xiàn)查詢:
List<Vote> votesFind = voteRepository.findAll(); List<Vote> votes = voteRepository.findByWeekReportIdAndVoteUserId(1L, 1L);

這樣就實現(xiàn)多條件查詢了,我想如果我不知道這個命名約定查詢之前肯定會,先全部請求到數(shù)據(jù),然后一個個for if去對比數(shù)據(jù),最后才拿到我想要的數(shù)據(jù)。
總結
使用命名約定查詢,減少錯誤的發(fā)生,提高開發(fā)效率,簡化查詢語句的編寫;這樣也使得代碼更具有易讀性,而且只需要定義方法的命名即可。
參考
官網(wǎng)地址:https://springdoc.cn/spring-data-jpa/#repositories.namespace-...
以上就是Spring Data JPA命名約定查詢實現(xiàn)方法的詳細內(nèi)容,更多關于Spring Data JPA命名約定查詢的資料請關注腳本之家其它相關文章!
相關文章
Spring線程池ThreadPoolTaskExecutor配置詳情
本篇文章主要介紹了Spring線程池ThreadPoolTaskExecutor配置詳情,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03
SpringBoot中@Value獲取值和@ConfigurationProperties獲取值用法及比較
在Spring Boot中,@Value注解是一個非常有用的特性,它允許我們將外部的配置注入到我們的Bean中,@ConfigurationProperties用于將配置文件中的屬性綁定到 Java Bean 上,本文介紹了@Value獲取值和@ConfigurationProperties獲取值用法及比較,需要的朋友可以參考下2024-08-08

