Mybatis的批量更新 bug

2021-07-10 18:05:47 字數 1141 閱讀 4043

mybatis的批量插入這裡有目前想批量更新,如果update的值是相同的話,很簡單,組織

update table set column='...' where id in (1,2,3)l

這樣的sql就可以了。

mybatis中這樣寫就行

update student set name = # where id in

#但是這樣的需求很少,一般是有個集合,每個元素中的值是不一樣的,然後需要一次性更新。一般的處理方式是使用for迴圈。這樣的效率較低,當資料量大時,期望有種一次性插入的操作。如果使用的是mysql,有

insert into table (aa,bb,cc) values(xx,xx,xx),(oo,oo,oo) on duplicate key update

和replace into table (aa,bb,cc) values(***,***,***),(ooo,ooo,ooo),(ccc,ccc,ccc) 

兩種方式可以處理。

當前資料庫是oracle,可以使用case when來拼成一長串sql處理

update mytable

set myfield = case id

when 1 then 'value'

when 2 then 'value'

when 3 then 'value'

endwhere id in (1,2,3)

實際上這種方式對於mysql也有效。

最開始的時候,想著寫一系列並列的更新語句就可以了

open="" close="">

update region_code set

code=#,

name=#

where id = #

這樣直接報錯,因為

mybatis對映檔案中的sql語句不允許

; 符號。按照可行的case when處理方式,

mybatis對映檔案書寫方式如下:

update region_code set

code=

when # then #

,name=

when # then #

where id in

#至此,批量更新功能完成。

總結:批量更新的時候,用;號結束不行。

Mybatis批量更新

mybatis批量更新 批量操作就不進行贅述了。減少伺服器與資料庫之間的互動。網上有很多關於批量插入還有批量刪除的帖子。但是批量更新卻沒有詳細的解決方案。這裡主要講的是1張table中。根據不同的id值,來update不同的property。資料表 1張。tblsupertitleresult。錯題...

mybatis 批量更新

mybatis批量更新 批量操作就不進行贅述了。減少伺服器與資料庫之間的互動。網上有很多關於批量插入還有批量刪除的帖子。但是批量更新卻沒有詳細的解決方案。這裡主要講的是1張table中。根據不同的id值,來update不同的property。資料表 1張。tblsupertitleresult。錯題...

MyBatis批量更新

批量更新時一條記錄update一次,效能比較差,容易造成阻塞。mysql沒有提供直接的方法來實現批量更新,但可以使用case when語法來實現這個功能。update course set name case id when 1 then name1 when 2 then name2 when 3...