Mybatis框架下批量修改數據庫,你要繞過這些坑

兩毛五哥哥

12-29 22:53

avatar

開發中,批量修改數據應該是很常見的功能需求。今晚開發時配置批量修改功能遇到很多坑,浪費了很多時間,特此記錄下來,跟大家分享,今天你看到的坑我都爲您鋪平了。

批量執行sql語句,無非就是批量修改和批量添加。我用現在使用量最多的框架mybatis寫一個修改功能給大家做個demo看。其他的自己舉一反三,我不在這浪費筆墨了,一樣的邏輯。

文章概覽:

使用事務控制,在service層控制進行循環修改。

mybatis動態sql語句進行批量修改。

透過現象看本質就是要實現以下效果

批量的sql語句一次執行

第一種:使用事務控制,在service層控制進行循環修改。容易想到,容易操作,但是要發送多次sql請求,浪費時間和性能。

這個是一個樹拖拽排序的後臺代碼:

sql就是最簡單的update語句

service用事務控制,循環執行插入就行

這個很簡單,很好理解,不多說。注意事務控制就行。

第二種:mybatis動態sql語句進行批量修改。一次性把要執行的sql語句發給數據庫,大量提示性能,推薦使用。這個是拖拽表格進行排序功能的。

mapper的動態sql語句

這個是一個拖拽表格時,批量修改用戶表的動態sql語句。配置文件中,item指明當前遍歷的對象,collection指明傳入的集合類型,open指明迭代以什麼符號開始,separator指明迭代間用什麼符號分割,close指明迭代用什麼符號結束,還有index可以指明迭代的索引。

我用的數據庫是mysql,注意看上邊的配置,oracle數據庫的配置略微不同。不同如下:

oracle數據庫的配置

mysql數據庫的配置


注意:mysql數據庫連接必須配置:&allowMultiQueries=true,而且這個參數必須配置到最前邊

還有注意一定要轉義字符,一定要看看有空格嗎,多個空格能讓你找一個月都不知道錯在哪

我也是日了狗了,就因爲這個參數配到了後邊,浪費了我兩個小時找 bug,完了到處都沒問題,我都tm懷疑人生了。

&allowMultiQueries=true放到最前邊,而且要注意你的文件使用轉義字符了嗎,不要有多餘的空格

一定寫成如下

jdbc\:mysql\://localhost\:3306/open?allowMultiQueries\=true&useUnicode\=true&characterEncoding\=UTF-8&zeroDateTimeBehavior\=convertToNull

然後其他的java代碼就簡單了:

mapper

service

controller

然後前臺的請求是這樣的,我用個工具測的。

好了,看下頁面效果。我做了個動態圖,效果如下:

拖拽排序表格的

拖拽排序樹的

其他方法,比如寫存儲過程我就不介紹了,常用上邊的就夠了。喜歡編程的可以點一下關注。看完

了不要白看,我希望你提問一個問題,可以是任意問題,可以不是編程的問題,沒準會有意想不到的答案,一個問題結交一羣朋友也沒準哦!

--------------------- 本文來自 師太,老衲把持不住了 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/u011277123/article/details/54374833?utm_source=copy

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章