JPA同時查詢多個屬性

2021-10-07 08:23:12 字數 1349 閱讀 2857

jpa同時查詢兩個屬性, 其中乙個是embedded class的屬性

findbyidageandtime(int age, date time)

深入淺出學spring data jpa **)

jparepository的查詢

findone 根據主鍵id查詢

findall 查詢所有

spring data jpa框架在進行方法名解析時,會先把方法名多餘的字首擷取掉,比如 find、findby、read、readby、get、getby,然後對剩下部分進行解析。

假如建立如下的查詢: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()」

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

page findbyname(string name, pageable pageable);

list findbyname(string name, sort sort);

也可以使用jpa的namedqueries,方法如下:

1:在實體類上使用@namedquery,示例如下:

@namedquery(name = 「usermodel.findbyage」,query = 「select o from usermodel o where o.age >= ?1」)

2:在自己實現的dao的repository介面裡面定義乙個同名的方法,示例如下:

public list findbyage(int age);

3:然後就可以使用了,spring會先找是否有同名的namedquery,如果有,那麼就不會按照介面定義的方法來解析。

Jpa條件查詢組合查詢and 和 or同時用

條件查詢,各個條件之間是and並且 關係,其中地理資訊省市區縣,例如河北省,要包括其下屬所有城市,每個城市包括下屬區縣,只選擇河北省時候,要查詢的是河北省所有的,他們之間是or 或者 關係 如果寫sql,很好完成where t.id 1 and t.name hbs and t.region 河北省...

vue watch如何同時監聽多個屬性

vue watch如何同時監聽多個屬性 最近在做vue的專案,在使用watch監聽屬性的時候發現需要同時監聽三個屬性,作為剛入門的小白,只接觸過監聽乙個屬性,上網查詢了別人的做法後,找到了解決的方案。第一種方法data watch else name2 function val else 這個方法就...

VUE監聽同時監聽多個屬性

同時監聽多個屬性 重點 通過計算屬性將兩個物件組合起來,並通過watch屬性監聽 只可以是兩個完整的屬性,不可以是子屬性。例如,就不能是const this,此處不懂看 如果可能的話,盡量將牽扯的屬性定義在乙個物件中,直接監聽該物件即可。例如直接監聽student物件 template export...