(將對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 crudrepositoryexample 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 @norepositorybean5.空庫2 inte***ce mybaserepositoryextends repository
8 9 inte***ce userrepository extends mybaserepository
spring提供了一些註解,用來對付這種空值請情況。
@nonnullapi(預設,不接受零)
@nonnull(可用來約束引數或返回值必須不能為零)
@nullable(可用來約束引數或返回值可以為零)
example 7:
inte***ce userrepository : repository6.查詢方法
spring中的基礎架構中,有一種查詢構建機制的約束。這種約束會忽略像find…by
,read…by
,query…by
,count…by
,和
get…by這種字首,而開始分析其餘部分。當然還可以引入進一步的表示式,可以定義實體中的一些條件,用and或者or對他們進行連線。
example 8:
inte***ce personrepository extends repositoryignorecase屬性表示忽略大小寫
orderby表示引用屬性進行查詢時附加子句並提供排序方向(asc或desc)
7.關於特殊引數的處理(比如pageable和sort in查詢方法)
example 9:
pagefindbylastname(string lastname, pageable pageable);8.關於限制查詢的結果slicefindbylastname(string lastname, pageable pageable);
listfindbylastname(string lastname, sort sort);
listfindbylastname(string lastname, pageable pageable);
查詢方法的結果可以通過關鍵字來限制,first或者top都可以互換使用。且後面可以直接加數字指定需要的前幾位結果。
example 10:
user findfirstbyorderbylastnameasc();9.方法中支援的關鍵字user findtopbyorderbyagedesc();
pagequeryfirst10bylastname(string lastname, pageable pageable);
slicefindtop3bylastname(string lastname, pageable pageable);
listfindfirst10bylastname(string lastname, sort sort);
listfindtop10bylastname(string lastname, pageable pageable)
lile在使用時,需要在字串中加上「%%」
distinct去重
10.使用註解 @query
example 11:
public inte***ce userrepository extends jparepositoryexample 12:使用命名引數
public inte***ce userrepository extends jparepositoryexample 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...