在web開發(fā)中,若我們從數(shù)據(jù)庫中拿到的數(shù)據(jù)過多,則我們常常會想到分頁。 分頁不但可以保持展示數(shù)據(jù)的頁面的整潔性和可控性,也同樣降低了數(shù)據(jù)庫的I/O壓力(需要時才查詢),可謂是一舉兩得。下面我們來談?wù)劊琈ySQL和Oracle數(shù)據(jù)庫如何進(jìn)行分頁。
——————Mysql分頁—————— 一般對MySQL數(shù)據(jù)庫分頁,我們都會使用到其自帶的limit函數(shù)。 Limit函數(shù)語法格式:
SELECT [DISTIN|UNIQUE](*,columname[AS alias],…)FROM tableWHERE …ORDER BY …LIMIT offset,rowsoffset:指定要返回的第一行的偏移量(就是指定從第幾條數(shù)據(jù)開始查),選項可選,默認(rèn)的偏移量是0(第一條數(shù)據(jù)) rows:指定返回數(shù)據(jù)的行數(shù),必須填寫
假如我有這樣一張表:  
 
當(dāng)我執(zhí)行: select t.* from chat_user t limit 5; 則會出現(xiàn)以下結(jié)果(從第一條數(shù)據(jù)開始,獲取5條記錄): 
select t.* from chat_user t limit 3,5; 從第3條數(shù)據(jù)(不包含第3條)開始,取5條記錄  
select t.* from chat_user t limit 5,5; 從第5條數(shù)據(jù)(不包含第5條)開始,取5條記錄  
由上面執(zhí)行的結(jié)果來看,對于offset和rows兩個參數(shù)的定義,大家應(yīng)該也已經(jīng)了解了,但是在真正的應(yīng)用開發(fā)中,我們肯定不能這樣寫的。舉個例子吧,我要每次查找5行記錄,那么,第一頁就是1-5,第二頁就是6-10,以此類推。你總不能每次都將offset都傳進(jìn)去吧? 所以,前人總結(jié)了一條公式,以便應(yīng)用在開發(fā)中,公式為offset=(page-1)*rows,這個page就是分頁的頁數(shù),比如第一頁,代入公式那就是從offset就是0,從第一條數(shù)據(jù)開始取。第二頁,代入公式那就是rows,從第rows條數(shù)據(jù)開始取。這就剛好對應(yīng)了我上面所說的1-5,6-10這些記錄。
獲取總頁數(shù): 實(shí)現(xiàn)分頁的程序中,需要獲取分頁后的總頁數(shù),原本總頁數(shù)可以根據(jù)“總記錄數(shù)/每頁顯示的記錄數(shù)”來計算,但是,這樣難免會有余數(shù)出現(xiàn),所以為了解決出現(xiàn)余數(shù)仍能正確獲得頁數(shù),我們也得出了一個公式:總頁數(shù)=(總記錄數(shù)-1)/每頁顯示的記錄數(shù)+1。 比如我上面的截圖中總記錄數(shù)為12,我每頁要顯示5條記錄,那么帶入里面,總頁數(shù)就是3,這是正確的。
——————ORACLE分頁——————
對于oracle的分頁,并沒有像mysql那樣,有一個limit函數(shù)專門供給分頁查詢。其實(shí)說白了,oracle的分頁查詢,就是給要查詢的表中定義一個ROWNUM,然后對他進(jìn)行范圍限定,起到分頁查詢的效果。 假如我有下面這一張表:  
那么我要查詢,行號在5-10之間的記錄,所以,我可以像這樣寫:  
那我要查詢?nèi)掌谛∮诘扔?017.03.01并且行號在1-10之間的記錄,我可以這樣寫:  
有 order by 條件限制的時候,你可以這樣寫  
——————Hibernate的HQL分頁—————— hibernate對于mysql還是oracle,都封裝好了分頁的寫法,我們只需要對setFirstResult和setMaxResult進(jìn)行設(shè)定查詢,具體代碼如下:
org.hibernate.Query q = “form User”;q.setFirstResult(int offset);q.setMaxResult(int rows);hibernate對mysql以及oracle封裝的底層代碼,有興趣的同學(xué)可以點(diǎn)擊下面博文地址進(jìn)去學(xué)習(xí),做一件事要刨根問底才能銘記于心。
博文鏈接: http://blog.csdn.net/davidmr_001/article/details/1587593
好啦!今天的博文就寫到這,學(xué)無止境,生生不息。
新聞熱點(diǎn)
疑難解答
圖片精選