Spring Data學習筆記 查詢方法

2021-07-09 20:23:20 字數 3165 閱讀 5067

spring data支援類似hibernate的查詢語句,也可以寫原生sql語句,下面記錄典型的例子。

/**

* 1. repository 是乙個空介面. 即是乙個標記介面

* 2. 若我們定義的介面繼承了 repository, 則該介面會被 ioc 容器識別為乙個 repository bean.

* 納入到 ioc 容器中. 進而可以在該介面中定義滿足一定規範的方法. 

*  * 3. 實際上, 也可以通過 @repositorydefinition 註解來替代繼承 repository 介面

*//**

* 在 repository 子介面中宣告方法

* 1. 不是隨便宣告的. 而需要符合一定的規範

* 2. 查詢方法以 find | read | get 開頭

* 3. 涉及條件查詢時,條件的屬性用條件關鍵字連線

* 4. 要注意的是:條件屬性以首字母大寫。

* 5. 支援屬性的級聯查詢. 若當前類有符合條件的屬性, 則優先使用, 而不使用級聯屬性. 

* 若需要使用級聯屬性, 則屬性之間使用 _ 進行連線. 

*///@repositorydefinition(domainclass=person.class,idclass=integer.class)

public inte***ce personrepsotory extends 

jparepository,

jpaspecificationexecutor, persondao

刪除和修改操作要加事務,寫在service中

//先配置自動掃瞄

@service

public class personservice 

@transactional

public void updatepersonemail(string email, integer id)

}

分頁和排序,personrepository實現pagingandsortingrespository介面

@test

public void testpagingandsortingrespository()

jparepository介面

@test

public void testjparepository()

jpaspecificationexecutor介面

/**

* 目標: 實現帶查詢條件的分頁. id > 5 的條件

* * 呼叫 jpaspecificationexecutor 的 pagefindall(specificationspec, pageable pageable);

* specification: 封裝了 jpa criteria 查詢的查詢條件

* pageable: 封裝了請求分頁的資訊: 例如 pageno, pagesize, sort

*/@test

public void testjpaspecificationexecutor()

};pagepage = personrepsotory.findall(specification, pageable);

system.out.println("總記錄數: " + page.gettotalelements());

system.out.println("當前第幾頁: " + (page.getnumber() + 1));

system.out.println("總頁數: " + page.gettotalpages());

system.out.println("當前頁面的 list: " + page.getcontent());

system.out.println("當前頁面的記錄數: " + page.getnumberofelements());

}

為某乙個 repository上新增自定義方法步驟:-定義乙個介面: 宣告要新增的, 並自實現的方法

-提供該介面的實現類: 類名需在要宣告的 repository 後新增 impl, 並實現方法

-宣告 repository 介面, 並繼承 1) 宣告的介面

-使用. 

-注意: 預設情況下, spring data 會在 base-package 中查詢 "介面名impl" 作為實現類. 也可以通過 repository-impl-postfix 宣告字尾. 

persondao介面

public inte***ce persondao
personrepsotoryimpl類實現persondao介面

public class personrepsotoryimpl implements persondao 

}

personrepsotory介面繼承persondao介面就可以使用自定義的方法

測試

@test

public void testcustomrepositorymethod()

為所有的 repository 都新增自實現的方法步驟:-宣告乙個介面, 在該介面中宣告需要自定義的方法, 且該介面需要繼承 spring data 的 repository.

-提供 1) 所宣告的介面的實現類. 且繼承 ******jparepository, 並提供方法的實現

-定義 jparepositoryfactorybean 的實現類, 使其生成 1) 定義的介面實現類的物件

-修改 節點的 factory-class 屬性指向 3) 的全類名

-注意: 全域性的擴充套件實現類不要用 imp 作為字尾名, 或為全域性擴充套件介面新增 @norepositorybean 註解告知  spring data: spring data 不把其作為 repository

本文出自 「優賽工作室」 部落格,請務必保留此出處

Spring Data 學習筆記

jpa是乙個規範,用於操作各種資料庫。spring data對mongodb的支援。支援方法對映,根據方法規則生成sql進行查詢,方法命名規則參見4 flux findbynameand string name,string spring data mongodb支援在2.2版中引入mongodb的...

SpringData整合ES 增刪改查

該示例以product為j abean物件,使用springdata整合es,用productdao對es進行方便的增刪改查 org.springframework.boot spring boot starter parent 2.3.6.release org.projectlombok lom...

springData學習(二) Query註解詳解

query註解查詢適用於所查詢的資料無法通過關鍵字查詢得到結果的查詢。這種查詢可以擺脫像關鍵字查詢那樣的約束,將查詢直接在相應的介面方法中宣告,結構更為清晰,這是spring data的特有實現。1.查詢id最大的資料 需要注意的是from後面跟的是與表名相對應的實體類名 同時返回值不能寫 retu...