在繼承jparepository和jpaspecificationexecutor介面後,我們就可以使用介面中定義的方法進行查詢。繼承jparepository後的方法列表:
繼承jpaspecificationexecutor的方法列表:
使用spring data jpa提供的查詢方法已經可以解決大部分的應用場景,但是對於某些業務來說,我們還需要靈活的構造查詢條件,這時就可以使用@query註解,結合jpql的語句方式完成查詢。@query註解的使用非常簡單,只需在方法上面標註該註解,同時提供乙個jpql查詢語句即可
public
inte***ce
customerdao
extends
jparepository
, jpaspecificationexecutor
此外,也可以通過使用@query來執行乙個更新操作,為此,我們需要在使用@query的同時,用@modifying來將該操作標識為修改查詢,這樣框架最終會生成乙個更新的操作,而非查詢。
public
inte***ce
customerdao
extends
jparepository
, jpaspecificationexecutor
spring data jpa同樣也支援sql語句的查詢,如下:
public
inte***ce
customerdao
extends
jparepository
, jpaspecificationexecutor
顧名思義,方法命名規則查詢就是根據方法的名字,就能建立查詢。只需要按照spring data jpa提供的方法命名規則定義方法的名稱,就可以完成查詢工作。spring data jpa在程式執行的時候會根據方法名稱進行解析,並自動生成查詢語句進行查詢
按照spring data jpa定義的規則,查詢方法以findby開頭,涉及條件查詢時,條件的屬性用條件關鍵字連線,要注意的是:條件屬性首字母需大寫。框架在進行方法名解析時,會先把方法名多餘的字首擷取掉,然後對剩下部分進行解析。
public
inte***ce
customerdao
extends
jparepository
, jpaspecificationexecutor
具體的關鍵字,使用方法和生產成sql如下表所示:
有時我們在查詢某個實體的時候,給定的條件是不固定的,這時就需要動態構建相應的查詢語句,在spring data jpa中可以通過jpaspecificationexecutor介面查詢。相比jpql,其優勢是型別安全,更加的物件導向。
jpaspecificationexecutor中定義的方法:
public
inte***ce
jpaspecificationexecutor
對於jpaspecificationexecutor,這個介面基本是圍繞著specification介面來定義的。我們可以簡單的理解為,specification構造的就是查詢條件。specification介面中只定義了如下乙個方法:
/**
* root:root介面,代表查詢的根物件,可以通過 root獲取實體中的屬性
* query:代表乙個頂層查詢物件,用來自定義查詢(很少使用)
* cb:用來構建查詢,此物件裡有很多條件方法
**/public predicate topredicate
(root
root, criteriaquery<
?> query, criteriabuilder cb)
;
使用案例:
@runwith
(springjunit4classrunner.
class
)@contextconfiguration
(locations =
)public
class
specificationtest};
customer customer = customerdao.
findone
(spec)
; system.out.
println
(customer);}
@test
public
void
testsort()
};//構造排序引數
sort sort =
newsort
(sort.direction.desc,
"custid");
list
list = customerdao.
findall
(spec, sort)
;for
(customer customer : list)
}@test
public
void
testpage()
};//構造分頁引數
pageable pageable =
newpagerequest(0
,5);
page
page = customerdao.
findall
(spec, pageable)
; system.out.
println
(page.
getcontent()
);//得到資料集合列表
system.out.
println
(page.
gettotalelements()
);//得到總條數
system.out.
println
(page.
gettotalpages()
);//得到總頁數
}}
criteriabuilder中方法對應關係如下所示:
物件導航查詢
物件圖導航檢索方式是根據已經載入的物件,導航到他的關聯物件。它利用類與類之間的關係來檢索物件。例如:我們通過id查詢方式查出乙個客戶,可以呼叫customer類中的getlinkmans()方法來獲取該客戶的所有聯絡人。物件導航查詢的使用要求是:兩個物件之間必須存在關聯關係。
@test
public
void
testfind()
}
使用specification查詢
@test
public
void
testfind()
};list
list = linkmandao.
findall
(spec)
;for
(linkman linkman : list)
}
Spring data jpa多表查多條件查詢
現有如下場景,需要根據a表的check code欄位和b表的store code check result欄位組合查詢,a表與b表的關聯關係為一對多。為了簡化查詢引數,我們對查詢引數進行了封裝,抽出了公共的querycondition public class querycondition publ...
八 Spring Data JPA多條件分頁查詢
多條件查詢 public page pagequery label label,integer page,integer size 標籤狀態 if stringutils.isnotblank label.getstate predicate parr newpredicate list.size ...
spring data jpa遇到的坑
1 column註解name最好全寫了,不然遇到像hibernate駝峰和下劃線風格配置變更時會出現找不到屬性,尤其開啟自動建表情況 2 唯讀操作情況,如果對讀取物件進行了屬性修改操作,那麼jpa會認為你要修改這個實體,使用hibernate的情況下回預設執行乙個update的sql,然後你懂得由於...