一進專案組就跟分頁結下了不解之緣。這段時間以來做的最多的功能還是分頁的實現、更新和維護。今兒下午手頭兒的活兒做完了,抽空兒把這段時間來做的功能總結一下。
先來點兒比較文學性的東西:
分頁原理:
分頁顯示,是將資料庫中的結果集人為的分成一段一段的來顯示即可。
query.scroll()和query.setfirstresult(),query.setmaxresults();這兩種方法都可以取到一定範圍內的資料,用來資料分頁顯示。
scroll()是用jdbc2.0的可滾動結果集實現;query.setmaxresults();query.setfirstresult()是資料庫sql語句實現。
在資料庫進行分頁是首選的方式。資料庫分頁實際上是利用資料庫本身sql擴充套件的功能進行分頁,例如mysql的 limit 0,50這樣的sql語句。不但速度快,而且非常節省記憶體。不過不是每種資料庫的都有這種分頁支援的sql,例如sql server就不支援。 scroll()是利用jdbc2.0的功能做分頁的,那麼就完全取決於特定資料庫的jdbc driver的實現了。事實上大部分jdbc driver都是把所有的結果集都一次取到記憶體,然後再分頁的。如果這個結果集非常大,例如幾萬條,不但程式執行速度會很慢,而且很容易導致out of memory。當然個別jdbc driver使用了伺服器端游標來實現,那麼就不會導致這種問題,例如jtds。
oracle中實現分頁:
對於rownum來說它是oracle系統順序分配為從查詢返回的行的編號,返回的第一行分配的是1,第二行是2,依此類推,這個偽欄位可以用於限制查詢返回的總行數,而且rownum不能以任何表的名稱作為字首。
如果想查詢從第40條記錄到第50條記錄,sql語句為:select * from (select rownum rn,rows your wanted where rownum>39) where rn<51
來個圖演示一下結果:
對應的hibernate實現**為:
public list> query(string hql, int first, int max)
分頁查詢功能
這兩個月來,一直在學做專案,學到了乙個如何做分頁,將頁面設計做得更加簡潔。下面是乙個用儲存過程寫的分頁查詢功能。分頁查詢,功能通用 create proc pagingforall tablename nvarchar 50 表 columns nvarchar 500 查詢的列 where nva...
EXTJS PHP分頁功能
1 js檔案主要 var pagesize 20 載入資料 store.load 設定每頁載入的記錄數 2 php檔案主要 實現分頁功能 獲取記錄開始條數和每頁條數 start isset post start post start 0 limit isset post limit post lim...
django 分頁功能
django 分頁功能 django自帶了paginator,功能有一定侷限,使用django pure pagination功能更為強大 github傳送門 1 使用pip源安裝 pip install django pure pagination pure pagination 3 在setti...