在前四章中我們已經基本完成了對單表的CRUD與多表聯合查詢方式的Mybatis操作與配置方式,今天這里要講的是關于一個業務問題中我們常 碰到的分頁問題。在開發web項目的時候我們經常會使用到列表顯示,一般我們都會用一些常用的列表控件例如,datatables(個人感覺十分不 錯),easy ui下面的那些封裝好的表格控件。

  思路:在這些控件里要達到分頁的效果,一般都會傳2個參數,第一個是表示當前頁的索 引(一般從0開始),第二個表示當前頁展示多少條業務記錄,然后將相應的參數傳遞給List<T> getList(PagenateArgs args)方法,最終實現數據庫中的分頁時候我們可以使用limit關鍵詞(針對mysql)進行分頁,如果是oracle或者sql server他們都有自帶的rownum函數可以使用。

  針對上述思路,首先我們需要還是一如既往的在 demo.mybatis.model下面新建一個名為PagenateArgs的分頁參數實體類與一個名為SortDirectionEnum的枚舉 類,里面包含當前頁面索引pageIndex, 當前頁展示業務記錄數pageSize, pageStart屬性表示從第幾條開始,(pageStart=pageIndex*pageSize)因為limit關鍵詞用法是表示【limit 起始條數(不包含),取幾條】,orderFieldStr排序字段,orderDirectionStr 排序方向,所以具體創建如下:


PagenateArgs分頁參數類

 

SQL排序枚舉

    完成上面的步驟以后我們在IVisitorOperation接口類中繼續添加一個方法public List<Visitor> getListByPagenate(PagenateArgs args),前幾章中我們其實已經有getList方法了,這次的分頁其實也就是在這個的基礎上稍加改動即可,IVisitorOperation接口類 改動后如下所示:

修改后的IVisitorOperation

  接下來我們就要開始動手改動我們的VisitorMapper.xml配置文件了,新增一個<select>節點id與參數類型參照前幾章的方式配置好,如下此處新增的id就為getListByPagenate,配置好以后如下

修改后的VisitorMapper配置

  在上面你會發現有類似,下圖中的配置,這些是屬于后面一章會講述的動態SQL問題,現在可以暫時不管,這里面的字段屬性都是針對PagenateArgs參數類中的屬性名,保持一致

<if test="pageStart>-1 and pageSize>-1">
    limit #{pageStart}, #{pageSize}
</if>

   在DemoRun類中創建測試方法:

DemoRun分頁
DemoRun.queryVisitorListWithPagenate(0100"id", SortDirectionEnum.DESC.toString());

運行后下測試結果,先按Id倒序排列,查的Visitor表一共有14條記錄,

假設我們取在第2頁取5條,執行下面也就是6-10條數據,這樣傳參數就行了

DemoRun.queryVisitorListWithPagenate(15"id", SortDirectionEnum.DESC.toString());

結果如下:

這樣就自己實現了的一個分頁邏輯啦~^0^,這里需要注意的就是我這邊orderFieldStr字段是沒有做過任何判斷的,理論上要處理下防止錯誤了列名傳進去,不過現在網上應該有現成封裝好的東西,大家也可以去google下,這里只是給個思路演示下怎么用mybatis分頁。

   完成這個后,因為是Mysql的關系所以在查詢結果里他沒有自帶rownum序列ID,所以查看測試數據是第幾條的時候可能不明顯,不zao急,我們可 以自己動手豐衣足食改造下上面的方法,這里我重新在model包里新建一個一模一樣的VisitorWithRn實體里面多帶一個rownum參數持久化 返回的RownumID,如下:

VisitWithRn

在 IVisitorOperation里面在新建一個名為 public List<VisitorWithRn> getListByPagenateWithRn(PagenateArgs args)的方法,同樣我們需要在VisitorMapper中配置下相應<select>節點與腳本,此處唯一的不同就是需要改下sql腳 本,如下:

添加具有Rn效果的配置文件

接下來剩下的就是如剛才在DemoRun下面添加測試方法,這里就不貼圖了,完成后你可以看到剛剛的6-10條數據會變成如下

 今天的東西就講到這里啦,下一章繼續講述Mybatis里面常用的動態SQL使用方法,希望對園子上的朋友們有幫助~^0^~



如果你覺得這篇文章對你有用,歡迎推薦[推薦]

如果你覺得文章內有錯誤歡迎指出^0^~

如果您想轉載本博客,請注明出處

如果您對本文有意見或者建議,歡迎留言

本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,否則作者保留追究法律責任的權利。