1. 程式人生 > 其它 >mybatis plus 多表查詢+分頁

mybatis plus 多表查詢+分頁

問題:
由於我們採用的是mybatis plus,它在Wrapper裡內建的方法支援多表聯合查詢,但是多表+分頁是不行的(雖然最新版本好像說可以了,但是並不好用)。於是我開始上網查,以前使用這個框架開發的人是如何解決這個問題的。MyBatis分頁提供的是邏輯分頁,每次將所有資料查詢出來,儲存到記憶體中,然後根據請求的頁碼,進行逐頁返回。如果表的資料量很大,無疑是一種災難。


我看到了一種,使用vo物件來接收查詢物件,再進行分頁的方法,但是過程很繁瑣,當時的我也還對各個層次不是非常熟悉,因此我沒有采用.接著我看到了原來,它還支援原生的mybatis,這就意味著我可以自己編寫查詢的sql進行分頁查詢。這裡有兩種方式:

方法一,先介紹通過xml方式實現自定義sql。先在mapper 資料夾中新建UserMapper.xml。注意,在xml檔案中,namespace對應的是user模組的dao,id對應dao下面UserMapper介面的函式名,resultType定義返回的型別。檔案結構及程式碼如

方法二,直接在dao層下的Mapper介面中定義方法。如果是要查詢所有使用者資料,新增@Select註解,並在註解中寫sql語句。這樣就可以自定義任意的sql語句進行資料操作。

這裡我選擇了第二種方式,如圖

這時,我已經完成了第一步。

接著我開始分頁查詢
1、在專案工程下,建立config目錄,在config目錄下,建立MybatisPlusConfig配置類。新增分頁外掛

如果沒有新增分頁外掛,selectPage方法也可以代用。但是會把資料資料全部返回。getPage和getTotal獲取到總頁數和總記錄數的值都是0。
2、嘗試將自定義sql語句的方法返回值改成page

3、測試帶引數的分頁查詢
那時候,遇到的問題有,直接將page作為一個返回值返回,這樣查詢到了,但是並不分頁。

最終,借鑑自帶的分頁法,發現,需要將page作為一個引數一併傳入才行。於是分頁成功。

總結:其實當時遇到的困難比現在形容起來細節上要多的多,但是沒法復原整個經過,總的來說,只要花費相應的時間,即使網上類似的教程很少,也可以照貓畫虎,一步步探索出自己想要的效果。