mybatis 批量修改 中的坑
使用事務控制,在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
然後前臺的請求是這樣的,我用個工具測的。
好了,看下頁面效果。我做了個動態圖,效果如下:
拖拽排序表格的
拖拽排序樹的