SpringData系列四 方法定義規範

2021-09-20 18:37:06 字數 3662 閱讀 7454

1、簡單條件查詢: 查詢某乙個實體類或者集合。

按照 spring data 的規範,查詢方法以 find 、read 、get 開頭, 涉及條件查詢時,條件的屬性用條件關鍵字連線,要注意的是:條件屬性以首字母大寫。

例如:定義乙個實體類 user

class user{

private string firstname;

private string lastname;

使用and條件連線時,應這樣寫:findbylastnameandfirstname(string lastname,string firstname);條件的屬性名稱與個數要與引數的位置與個數一一對應。

2、支援的關鍵字寫法如下:

3、查詢流程:

假如建立如下的查詢:findbyuserdepuuid(),框架在解析該方法時,首先剔除 findby,然後對剩下的屬性進行解析,假設查詢實體為doc。

(1)、先判斷 userdepuuid (根據 pojo 規範,首字母變為小寫)是否為查詢實體的乙個屬性,如果是,則表示根據該屬性進行查詢;如果沒有該屬性,繼續第二步;

(2)、從右往左擷取第乙個大寫字母開頭的字串(此處為uuid),然後檢查剩下的字串是否為查詢實體的乙個屬性,如果是,則表示根據該屬性進行查詢;如果沒有該屬性,則重複第二步,繼續從右往左擷取;最後假設 user 為查詢實體的乙個屬性;

(3)、接著處理剩下部分(depuuid),先判斷 user 所對應的型別是否有depuuid屬性,如果有,則表示該方法最終是根據 「 doc.user.depuuid」 的取值進行查詢;否則繼續按照步驟 2 的規則從右往左擷取,最終表示根據 「doc.user.dep.uuid」 的值進行查詢。

(4)、可能會存在一種特殊情況,比如 doc包含乙個 user 的屬性,也有乙個 userdep 屬性,此時會存在混淆。可以明確在屬性之間加上 「_」 以顯式表達意圖,比如 「findbyuser_depuuid()」 或者 「findbyuserdep_uuid()」

特殊的引數: 還可以直接在方法的引數上加入分頁或排序的引數,比如:

pagefindbyname(string name, pageable pageable);

listfindbyname(string name, sort sort);

測試:

建立實體類address

@table(name="jpa_addresses")

@entity

public class address

public void setid(integer id)

public string getprovince()

public void setprovince(string province)

public string getcity()

public void setcity(string city)

}

在實體類person中新增address屬性及其getter和setter方法

private address address;

@joincolumn(name="address_id")

@manytoone

public address getaddress()

public void setaddress(address address)

在personrepsotory定義方法

//where lastname like ?% and id < ?

listgetbylastnamestartingwithandidlessthan(string lastname, integer id);

//where lastname like %? and id < ?

listgetbylastnameendingwithandidlessthan(string lastname, integer id);

//where email in (?, ?, ?) or birth < ?

listgetbyemailinandbirthlessthan(listemails, date birth);

//where a.id > ?

listgetbyaddress_idgreaterthan(integer id);

編寫測試方法

@test

public void testkeywords()

@test

public void testkeywords2()

控制台輸出:

Ruby入門之四(方法)

在ruby中隨意輸出字串,我們可以定義乙個方法。irb main 001 0 def a irb main 002 1 puts hello world irb main 003 1 end nil上面的 中第一行 def a 表示定義了乙個名叫a的方法,是方法定義的開始。下面一行是方法體 puts...

物件導向(四)方法過載

本節目標 掌握方法過載的定義及使用 課程匯入 public void run public void run 那為什麼我們上一小節中可以定義多個構造方法呢?無參構造方法 public dog 帶參構造方法 兩個引數 public dog string name,string 帶參構造方法 publi...

類與介面(四)方法過載解析

一 方法過載簡介 方法過載 當兩個 或多個 方法的名稱相同,而引數的對應型別或個數不同時,我們就說方法過載了。當然,編譯器也能識別出來。編譯器是如何識別呼叫了哪個方法?在往下講前,我們先來了解一下 編譯器是怎麼才能識別出程式呼叫了那個方法。其實,這個問題就是在問 在呼叫方法處,編譯器能得到呼叫方法的...