Hibernate實現分頁

2021-08-23 13:47:23 字數 1168 閱讀 1594

hibernate提供了乙個支援跨系統的分頁機制,這樣無論底層是什麼樣的資料庫都能用統一的介面進行分頁操作。不用寫oracle專用的3層巢狀是一件多麼幸運的事啊……

舉個例子

比如 /**

* 分頁顯示方法 返回乙個從第n條開始到第m條結束的記錄集合

* 即每頁顯示m條記錄

* @param pagehql 動態hql語句

* @param firstresult 可以看成是游標起始位置 第1條的話值為0

* @param maxresults 可以看成是每頁顯示多少條記錄

* @return list 返回乙個從第n條開始到第m條結束的記錄集合

*/ public list cutpage(string pagehql,int firstresult,int maxresults)

至於底層是怎麼實現的完全不必去管,節省了很多時間,要是自己寫sql的話,如果是oracle,那3層巢狀要寫死人。這樣我要分頁的時候就呼叫這個方法,傳入hql語句,再決定從第幾條記錄開始每頁顯示多少條。然後,再寫個方法:

/**

* 取得總頁數方法

* @param pagehql 動態hql語句

* @param maxresults

* @return int 返回乙個總頁數

*/ public int getcountpage(string pagehql,int maxresults)

呼叫這個方法傳入hql語句和每頁顯示的條數以獲得總頁數

這樣就可以在jsp和action或servlet之前取得和傳遞當前頁數,每頁顯示條數以及總頁數的值了

關於hql中關於select count(*)的寫法,參照"select count(*) from userinfopo in class com.fw.po.userinfopo" 其中userinfopo是乙個資料庫表的對映model類 放在包com.fw.po下面

需要注意的是countpage 是double 的,也就是帶小數點的。比如,如果每頁顯示3條,總共有16條記錄的話,那麼應該有6頁,最後一頁顯示1條記錄。也就是從記錄條數除以每頁顯示條數如16/3=5餘1,可以判斷對16/3取模,大於0的話就讓獲得的型別為整型的總頁數+1。而參照上面的方法16/3的結果是乙個double型,因此就用math.ceil()方法將結果向上變為整數。

實現Hibernate分頁查詢顯示

昨天實現了分頁的jsp包含檔案,今天完成hibernate分頁查詢,並與分頁檔案結合,實現分頁顯示功能。2.control dao service裡面實現分頁查詢。dao 層面 public listgetrolebyquerybypage string query,int pageno,int p...

Hibernate分頁查詢的實現

設定分頁引數 query.setfirstresult firstresult setmaxresults maxresult 表示從第firstresult 1個物件開始,獲取接下來的maxresult個資料。setfirstresult 方法的引數是開始獲取物件的行數,從0開始編號 setmax...

實現Hibernate分頁查詢原理解讀

hibernate 可以實現分頁查詢,例如 從第2萬條開始取出100條記錄 query q session.createquery from cat as c q.setfirstresult 20000 q.setmaxresults 100 list l q.list 那麼hibernate底層...