Spring?Data?JPA命名約定查詢實(shí)現(xiàn)方法
很笨的實(shí)現(xiàn)
假設(shè)我只要需要最后三條數(shù)據(jù),如下是我的實(shí)現(xiàn)方法,這是一個(gè)很笨的實(shí)現(xiàn),因?yàn)檫@個(gè)操作是真的很冗余,這個(gè)是請(qǐng)求到了全部,在進(jìn)行降序排序,然后在截取前面三條數(shù)據(jù)。
// 創(chuàng)建一個(gè) Sort 對(duì)象,表示按照 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()這個(gè)方法jpa會(huì)根據(jù)這個(gè)方法名稱返回前面三條數(shù)據(jù)。
在前面已經(jīng)繼承JpaRepository接口。JpaRepository接口又繼承了四個(gè)接口PagingAndSortingRepository、CrudRepository、Repository、QueryByExampleExecutor,看到接口繼承關(guān)系圖如下:
從上圖中我們可以看到兩種線,虛線和帶箭頭的實(shí)線。
- 實(shí)線帶箭頭: 通常表示繼承關(guān)系。在繼承關(guān)系中,子類繼承了父類的屬性和方法。實(shí)線箭頭的方向指向父類,表示子類是從父類繼承而來。
- 虛線: 通常表示關(guān)聯(lián)或依賴關(guān)系。在關(guān)聯(lián)關(guān)系中,一個(gè)類與另一個(gè)類有某種關(guān)聯(lián),但不一定是繼承關(guān)系。虛線箭頭的方向通常表示關(guān)聯(lián)的方向,即其中一個(gè)類依賴于另一個(gè)類。
繼承四個(gè)接口的作用
- Repository接口:提供了基本的 CRUD 操作,是倉庫接口層次結(jié)構(gòu)的最頂層。
- CrudRepository接口:CrudRepository 是繼承自 Repository 接口的子接口,提供了基本的 CRUD 方法,包括保存、查詢、更新和刪除。
- PagingAndSortingRepository接口:PagingAndSortingRepository 是繼承自 CrudRepository 接口的子接口。
- QueryByExampleExecutor 接口:支持基于實(shí)例的動(dòng)態(tài)查詢的方法、允許你通過傳遞一個(gè)示例對(duì)象來執(zhí)行查詢,而不需要手動(dòng)編寫查詢語句。
如何使用命名約定查詢
Spring Data JPA提供的方法命名規(guī)則定義方法的名稱,就可以完成查詢工作。程序執(zhí)行的時(shí)候會(huì)根據(jù)方法名稱進(jìn)行解析,并自動(dòng)生成sql語句進(jìn)行查詢。
規(guī)則如下:
1.findBy + 屬性名稱 (根據(jù)屬性名稱進(jìn)行完成匹配的查詢=)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; }
實(shí)現(xiàn)查詢:
List<Vote> votesFind = voteRepository.findAll(); List<Vote> votes = voteRepository.findByWeekReportIdAndVoteUserId(1L, 1L);
這樣就實(shí)現(xiàn)多條件查詢了,我想如果我不知道這個(gè)命名約定查詢之前肯定會(huì),先全部請(qǐng)求到數(shù)據(jù),然后一個(gè)個(gè)for if去對(duì)比數(shù)據(jù),最后才拿到我想要的數(shù)據(jù)。
總結(jié)
使用命名約定查詢,減少錯(cuò)誤的發(fā)生,提高開發(fā)效率,簡(jiǎn)化查詢語句的編寫;這樣也使得代碼更具有易讀性,而且只需要定義方法的命名即可。
參考
官網(wǎng)地址:https://springdoc.cn/spring-data-jpa/#repositories.namespace-...
以上就是Spring Data JPA命名約定查詢實(shí)現(xiàn)方法的詳細(xì)內(nèi)容,更多關(guān)于Spring Data JPA命名約定查詢的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Spring cloud oauth2如何搭建認(rèn)證資源中心
這篇文章主要介紹了Spring cloud oauth2如何搭建認(rèn)證資源中心,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11Java中的this、super、final關(guān)鍵字詳解
這篇文章主要介紹了Java中的this、super、final關(guān)鍵字詳解,它在方法內(nèi)部使用,表示這個(gè)方法所屬對(duì)象的引用,它在構(gòu)造器內(nèi)部使用,表示該構(gòu)造器正在初始化的對(duì)象,this 可以調(diào)用類的屬性、方法和構(gòu)造器,需要的朋友可以參考下2023-09-09Java實(shí)現(xiàn)文件壓縮為zip和解壓zip壓縮包
這篇文章主要為大家介紹了Java如何實(shí)現(xiàn)將文件壓縮為zip以及解壓zip壓縮包,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手嘗試一下2022-06-06AndroidQ沙盒機(jī)制之分區(qū)存儲(chǔ)適配
這篇文章主要介紹了AndroidQ沙盒機(jī)制之分區(qū)存儲(chǔ)適配,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06SpringBoot + Spring Cloud Consul 服務(wù)注冊(cè)和發(fā)現(xiàn)詳細(xì)解析
這篇文章主要介紹了SpringBoot + Spring Cloud Consul 服務(wù)注冊(cè)和發(fā)現(xiàn),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07Java調(diào)用MySQL存儲(chǔ)過程并獲得返回值的方法
這篇文章主要介紹了Java調(diào)用MySQL存儲(chǔ)過程并獲得返回值的方法,實(shí)例分析了java實(shí)現(xiàn)MySQL存儲(chǔ)過程的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07MyBatis-Plus如何通過注解使用TypeHandler
這篇文章主要介紹了MyBatis-Plus如何通過注解使用TypeHandler,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01