Spring Data JPA的查詢方法

2021-10-03 02:38:57 字數 3825 閱讀 7119

在繼承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,然後你懂得由於...