SpringdataJpa的官方API學習

2021-08-20 08:17:47 字數 3543 閱讀 1462

(將對springdata jpa的api  第三章之後進行解釋)

1.springdata中的中心介面是——repository。這個介面沒有什麼重要的功能(原句稱沒什麼驚喜的乙個介面)。主要的作用就是標記和管理。其他的介面都是此介面的子類。

example 1:

1 public inte***ce crudrepositoryextends repository
除此還提供了一些技術相關的介面,比如 jparepository,mongorepository這兩個介面繼承了crudrepository。

2.crudrepository

1)crudrepository有個子類pagingandsortingrepository,增加了一些方法來實現分頁。

example 2:

1 public inte***ce pagingandsortingrepositoryextends crudrepository
example 3:sort中建立的是自定義的排序方式,pagerequest中建立的是自定義分頁的方式(注意:分頁索引是從0開始,所以想要查詢第一頁二十條資料時,應插入(0,20))。

dao層:

controller(直接呼叫,沒通過service):

2)除了普通查詢,計數和刪除查詢都可以使用

example 4:計數查詢

example 5:派生刪除查詢

3.查詢資料

spring data,將查詢資料的方法分成了四個步驟。用處不大,在此不詳述。

4.定義dao層的繼承介面

通常,dao層介面將會繼承repository,crudrepository 或者pagingandsortingrepository 。

或者不想繼承springdata的介面,你也可以定義個自己的介面@repositorydefinition,繼承crudrepository 。可以定義一套完整的自己的方法。

example 6:

1 @norepositorybean

2 inte***ce mybaserepositoryextends repository

8 9 inte***ce userrepository extends mybaserepository

5.空庫

spring提供了一些註解,用來對付這種空值請情況。

@nonnullapi(預設,不接受零)

@nonnull(可用來約束引數或返回值必須不能為零)

@nullable(可用來約束引數或返回值可以為零)

example 7:

inte***ce userrepository : repository
6.查詢方法

spring中的基礎架構中,有一種查詢構建機制的約束。這種約束會忽略像find…byread…byquery…bycount…by,和

get…by這種字首,而開始分析其餘部分。當然還可以引入進一步的表示式,可以定義實體中的一些條件,用and或者or對他們進行連線。

example 8:

inte***ce personrepository extends repository

ignorecase屬性表示忽略大小寫

orderby表示引用屬性進行查詢時附加子句並提供排序方向(asc或desc)

7.關於特殊引數的處理(比如pageable和sort in查詢方法)

example 9:

pagefindbylastname(string lastname, pageable pageable);

slicefindbylastname(string lastname, pageable pageable);

listfindbylastname(string lastname, sort sort);

listfindbylastname(string lastname, pageable pageable);

8.關於限制查詢的結果

查詢方法的結果可以通過關鍵字來限制,first或者top都可以互換使用。且後面可以直接加數字指定需要的前幾位結果。

example 10:

user findfirstbyorderbylastnameasc();

user findtopbyorderbyagedesc();

pagequeryfirst10bylastname(string lastname, pageable pageable);

slicefindtop3bylastname(string lastname, pageable pageable);

listfindfirst10bylastname(string lastname, sort sort);

listfindtop10bylastname(string lastname, pageable pageable)

9.方法中支援的關鍵字

lile在使用時,需要在字串中加上「%%」

distinct去重

10.使用註解 @query

example 11:

public inte***ce userrepository extends jparepository
example 12:使用命名引數

public inte***ce userrepository extends jparepository
example 13:宣告操作查詢

@modifying

@query("update user u set u.firstname = ?1 where u.lastname = ?2")

int setfixedfirstnamefor(string firstname, string lastname);

spring data jpa遇到的坑

1 column註解name最好全寫了,不然遇到像hibernate駝峰和下劃線風格配置變更時會出現找不到屬性,尤其開啟自動建表情況 2 唯讀操作情況,如果對讀取物件進行了屬性修改操作,那麼jpa會認為你要修改這個實體,使用hibernate的情況下回預設執行乙個update的sql,然後你懂得由於...

spring Data Jpa的分頁管理

通過jpa大大簡化了我們對資料庫的開發工作。但是,之前的例子中我們只提到了最簡單的crud 增刪改查 操作。實際上,spring data jpa對於分頁以及排序的查詢也有著完美的支援,接下來,我們來學習如何通過pageable來對資料庫進行分頁查詢。一 pageable 是spring data庫...

SpringData Jpa中count的使用

通常,我們會有統計數量的需求,jpa對一些簡單統計數量的需求通過方法名就可以解析。然而對於稍微複雜的需求則無法通過方法名解析。對於這種需求,還是需要寫sql實現。當我的repository介面繼承jparepository時,缺省會繼承它的乙個count 方法 crudrepository介面中有c...