兩毛五哥哥
12-29 22:53
開發中,批量修改數據應該是很常見的功能需求。今晚開發時配置批量修改功能遇到很多坑,浪費了很多時間,特此記錄下來,跟大家分享,今天你看到的坑我都爲您鋪平了。
批量執行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