自己實現乙個JPA中的分頁

2021-08-10 18:07:46 字數 1644 閱讀 3743

最近有乙個需求必須要使用原生sql進行查詢資料

這就帶來了乙個問題:沒辦法使用jpa直接傳入pageable物件進行分頁查詢

所以就需要自己實現乙個類似jpa分頁的功能

在查了原始碼之後也沒有看到jpa到底是怎麼實現的(如果有知道的請告訴我…)

所以自己封裝了乙個工具類來模擬了jpa的分頁

下面先讓我們看一看jpa中page是如何使用的

我們先建乙個學生student的實體(省略了構造、get、set方法)

stuent:

@entity

@table(name = "student")

public

class

student

implements

serializable

訪問該路徑,可以看到使用jpa的分頁給我們返回的資料,],

"first": true

, "totalelements": 5

}

可以看到page返回的每乙個引數包含的內容

有了上面的引數,我們就需要模仿乙個一樣的分頁

首先讓我們先根據上面的引數寫乙個工具類:

public

class

pageutil

注意,這裡numberofelements和content這兩個屬性需要在新增資料的時候set進去

然後我們在service中寫我們的具體邏輯

/**

* 自定義分頁獲取所有學生

*@param page

*@param size

*/public pageutil findallstudentbymypage(int page, int size)

我們按照jpa的約定,傳入的page是從0開始的,我們返回的時候第一頁也是從0開始的。

第一條sql,使用sql中的limit關鍵字對資料進行分頁查詢,第乙個引數是page*size

第二條sql是查詢所有的資料共有多少條,然後對這個總共有多少條進行除法等運算,就可以得到一共有多少頁資料(具體的邏輯在工具類的構造方法中

在controller中定義好路徑

訪問該路徑,得到資料:

,

],"first": true

, "totalelements": 5

}

可以看到content中的內容的key的值跟jpa當中的有稍微的區別

這是因為我們從資料庫查出的資料的屬性是按照資料庫中儲存的key來進行轉換的

所以這裡的key是資料庫中的字段

要解決這個小問題可以從query 的 resultlist拿出每一條資料再轉為student實體

Struts分頁的乙個實現

在web應用程式裡,分頁總讓我們開發人員感到很頭疼,倒不是因為技術上有多麼困難,只是本來和業務沒有太多關係的這麼乙個問題,你卻得花不少功夫來處理。要是稍不留神,時不時出點問題就更鬱悶了。我現在做的乙個專案也到了該處理分頁的時候了,感覺以前處理得都不好,所以這次有所改變,基本目標是在現有 未分頁 的 ...

乙個自己實現的string

最近實現了乙個string 類,新增了一些c 11 元素。除了基本的構造析構函式,拷貝構造和賦值函式,另外新增移動拷貝和賦值函式。default是乙個很方便的特性有木有。default constructor kianstring default kianstring const char c ch...

自己實現乙個Redux。

redux是乙個用於狀態管理的js框架,是flux架構的一種實現 如圖 reducer 為乙個使用者自定義的函式,在store分發 dispacth action時提供處理方法去更新狀態樹中的狀態。應該為乙個純函式。action 為乙個使用者自定義的物件,裡面包含乙個type屬性,標識乙個動作型別。...