前面一節我們進行了MyBatis Plus的入門介紹,並且進行了新增和查詢的相關接口介紹和編寫,這一節我們繼續深入學習MP。
一、自定義SQL
1、自定義SQL語句使用方法
有時候我們使用MP自帶的條件構造器滿足不了我們的查詢條件了,MP也支持我們自定義SQL。但是要求MP的版本大於等於3.0.7!下面我們來實際應用一下。
我們首先在Mapper裏寫一個自定義的接口方法,這裏使用註解的方式編寫SQL語句,大家可以看到這是一個簡單的查詢所有信息的SQL語句,然後我們調用這個接口的方法如下圖:
運行測試一下:
測試成功!
2、自定義SQL條件構造器使用方法
這裏如果想要在這個方法裏面使用條件構造器該怎麼寫呢?這裏我們在新建一個接口如下圖:
這裏我們自定義了一個Lambda表達式的條件構造器,然後我們寫個接口測試一下:
運行測試一下:
測試成功!
二、分頁查詢
1、分頁配置
首先我們寫一個配置文件來配置MP的物理分頁插件,代碼如下:
然後我們來看一下MP所提供的分頁接口如下圖:
這兩個一個返回實體數據信息,一個返回Map信息,下面我們來實踐一下!
2、selectPage方法使用
這裏我們使用selectPage方法,需要傳入Page對象和條件構造器,最後返回一個Ipage對象,裏面包含下列信息:
分別爲總記錄數,總頁數,總數據集,當前頁,當前頁數據量,下面我們運行一下進行測試!
從執行的sql中可以看出執行了兩次sql查詢,一次是查詢記錄數的,一次查詢具體數據,查詢數據的有兩個參數0(Long)代表偏移量,2(Long)代表最大返回兩條記錄。然後可以看到總頁數2頁,總記錄數4個,我們看一下測試結果:
果然只返回了兩條數據,我們把內頁數量調爲4測試一下,如下圖:
可以看到,現在只有1頁了,且這一頁4條數據,說明我們測試成功!
3、selectMapsPage方法使用
下面我們再來測試一下返回Map數據的方法,其實和上面類似,只不過返回的是Map對象,如下圖所示:
運行一下看效果:
也沒問題,只不過返回的數據類型是Map對象,可以按需要取出使用。
4、分頁查詢優化
這樣分頁部分基本就講解完成了,但是還有一個問題就是每次我們的分頁查詢都是跑了兩次SQL語句,當我們不需要查詢記錄數的時候那系統性能就會有損耗,這裏我們來處理一下這個問題。
我們加入這一句代碼,MP在分頁查詢時就不會去查詢記錄數了,運行測試一下:
只執行了查詢數據的,沒有執行查詢總記錄數的,說明我們測試成功了!
三、數據修改更新接口開發
前面講了數據新增、查詢的各種接口的開發,這裏我們開始介紹數據修改更新接口的開發。
1、根據id進行修改
這裏我們還是選擇json數據格式進行數據傳輸:
運行看一下效果如下圖:
測試成功!並且我們看到MP也是可以滿足局部更新的,就是你輸入什麼參數就更新什麼值。
2、update方法修改
下面我們來看一下另外一種更新數據的方法update方法:
這裏我們使用update方法傳入了兩個參數,一個是實體,一個是條件構造器wrapper,我們看一下執行的sql語句:
我們的條件構造器中的參數在where的位置,實體類中的參數在set位置上,即條件構造器用來設置條件,實體用來設置修改內容。看一下執行結果:
測試成功!但是你可能覺得每次都要新建一個實體類比較麻煩,彆着急,也有不用新建實體類的方法:
3、不構建實體的修改方法
這裏我們直接把要set的對象放到了wrapper中,然後在update方法中的實體類位置傳入了null,運行測試一下:
也是可以的。我們也可以使用具有防誤寫功能的Lambda表達式來寫,如下圖:
4、Lambda條件構造器的修改方法
這裏我們把名字改爲張三三,年齡改爲88,運行一下看效果:
OK,測試成功!我們也可以使用鏈式的Lambda條件構造器進行修改,如下圖:
5、鏈式Lambda條件構造器的修改方法
運行看一下效果,
這裏我們把張三三的年齡修改爲18,看一下結果:
測試成功!
三、數據刪除接口開發
1、根據id刪除
首先我們來介紹簡單的通過id刪除的方法如下圖:
運行測試一下:
可以看到數據庫中id爲1的數據已經被刪除了。
2、deleteByMap方法刪除
這個跟我們前面的查詢時使用的selectByMap類似,傳入一個Map對象進行刪除,可以滿足根據數據庫中的某一列或多列信息進行刪除,這裏我們寫代碼介紹一下:
這裏我們根據性別進行信息刪除,比如我們刪除所有的女生信息,運行看一下效果:
顯示刪除了兩條信息,看一下sql語句:
再看一下數據庫驗證一下:
測試成功,所有的女生信息都已經被刪除了。
3、deleteBatchIds方法刪除
這個方法和我們前面使用的批量查詢功能也是類似的,只不過我們這兒是批量刪除,寫代碼測試一下:
這裏我們以傳入兩個id進行刪除爲例進行講解,運行看一下效果:
這裏我們把id爲2,3的數據刪除了,最後去數據庫驗證一下:
測試成功!
4、帶條件構造器的刪除方法
運行測試一下:
再去數據庫中驗證一下:
測試成功!
這樣我們結合上一篇文章已經使用MP把增刪改查的所有接口都寫完了!
這一節就先暫時介紹到這兒!