1. 程式人生 > >mybatis 批量修改 中的坑

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

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

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

拖拽排序表格的

拖拽排序樹的