問題:
由於我們采用的是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作為一個參數一並傳入才行。於是分頁成功。
總結:其實當時遇到的困難比現在形容起來細節上要多的多,但是沒法復原整個經過,總的來說,只要花費相應的時間,即使網上類似的教程很少,也可以照貓畫虎,一步步探索出自己想要的效果。