Oracle與Mysql分頁的區別


前言

  從去年的12月開始,小故就一直沒更博客,主要還是因為時間管理不當(懶),在當時想要跟大家分享一個東西,可是沒有及時整理,導致過后就會很快的遺忘重點,第二天或許又會有新的東西打亂原先的思維。話不多說,回歸正題。

 正文

  因為之前在項目中比較少接入oracle,做的項目中即使用到了,更多做的也是結算相關的業務,管理系統這塊應該說算是重新操刀了吧。剛做分頁的時候,還是用回mysql的習慣limit去解決,后來發現不起作用。百度了一下,說是用rownum是可以用來解決oracle分頁的特殊方法,代碼如下圖一:

  這種做法是沒有問題的。那么問題來了各位,這也是我想寫這篇博客的原因,管理系統中分頁是繞不開的話題(當然如果有朋友直接用包米豆(baomidou)封裝好的Page做法那就另說了),這種寫法下,我們都知道直接在 where后面加上查詢條件,然后再拼接分頁語句即可。如下圖二

  這樣是錯的,你會發現加上條件查詢不但分不了頁,而且查不回數據。原因是上述做的rownum的別名rn(這個必須要有)被限制了,當你加了條件后,庫中找到那個條件對應的數據並不是rn對應的第一條數據,即rn不等於1了。所以導致rn后面的分頁條件不成立。  區別於mysql的是,mysql並不需要rownum這一個關鍵字來做模擬的分頁,所以即使加上條件也可以用limit關鍵字去限制pageSize(太簡單,不放圖了)。所以對於這個問題,我去查了百度,什么的都有,拼接sql等等。后面覺得自己來,其實我們的思維可以是這樣,既然加了條件之后,rn所對應的數不是規則的從1-10了,那我們可以從rn入手,即使是加了條件,再重新排列條件后的數據是1-10,有了這個思維咱就直接上 圖三

   是不是感覺沒變化,再對比圖二和圖三看看,思維對了就很簡單了。只需要把<include refid="where_sql" />(你的查詢條件)放到括號內即可。但是又出現新的問題了:

那你不能開兩個接口給前端了,一個列表頁,一個搜索頁,這樣搞前端設計就不合理了。那其實可以在同一個接口內加個判斷,有條件過來的話,走圖三;不加條件,走圖一,即可解決了。

 總結

  又到了周五,在工位閑了想找點事做,就趕在下班前趕緊寫了好今晚可以打打游戲沖沖浪哈哈哈。有三個多月沒更新博客了,疫情過后更新博客關於java內容的或許會慢慢減少,當然是不出意外的情況。身邊總會有很多想要跳槽的,小故是幸運的,在當今大環境不好的情況下,能有轉行的機會,實屬珍貴且珍惜,願自己成功。網上總說,如今已不再是悶頭做程序猿的時代,但小故認為,如今是一個需要程序猿偶爾抬抬頭,看看這時代需要的新技術、該具備的思維,再悶頭不斷學習的、成為一個"全能”的程序猿的時代。

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM