mybatis 批量更新資料 mysql

2021-09-26 01:43:46 字數 1774 閱讀 2723

簡單粗暴,寫乙個更新的方法,迴圈呼叫就是了,但是效率就比較低了。效能較差。

批處理,類似於:

update stu  set name='jia' ,score=213 where id =1;

update stu set name='jia2' ,score=456 where id =2;

update stu set name='jia3',score=222 where id =3

xml檔案這樣寫

update stu

name=#,score=#

where id =#

列印的sql像這樣

==>  preparing: update stu set name=?,score=? where id =? ; update stu set name=?,score=? where id =? ; update stu set name=?,score=? where id =? 

==> parameters: jias1(string), 123(integer), 1(integer), jias2(string), 123(integer), 2(integer), jias3(string), 123(integer), 3(integer)

<== updates: 1

但mybatis對映檔案中的sql語句預設是不支援以" ; " 結尾的,也就是不支援多條sql語句的執行。所以需要在連線mysql的url上加 &allowmultiqueries=true 這個才可以執行。

mysql沒有提供批量更新的方式,但是可以通過一些技巧實現,例如

update stu set

name = case id

when 1 then 'jiajia'

when 2 then 'wanghusai'

when 3 then 'wangha'

end,

score = case id

when 1 then 12.3

when 2 then 52.2

when 3 then 33.2

endwhere id in (1,2,3)

xml配置檔案可以這樣實現

update stu

set name=

when # then #

,score=

when # then #

where id in

#

列印的sql語句就是這樣:

==>  preparing: update stu set name= case id when ? then ? when ? then ? when ? then ? end ,score= case id when ? then ? when ? then ? when ? then ? end where id in ( ? , ? , ? ) 

==> parameters: 1(integer), jias1(string), 2(integer), jias2(string), 3(integer), jias3(string), 1(integer), 123(integer), 2(integer), 123(integer), 3(integer), 123(integer), 1(integer), 2(integer), 3(integer)

<== updates: 3

Mybatis批量更新資料

第一種方式 update aa set a b where c in foreach update 但是這種方式修改的字段值都是一樣的。第二種方式 修改資料庫連線配置 allowmultiqueries true 比如 jdbc mysql update test test 1 set where ...

Mybatis批量更新資料

第一種方式 update aa set a b where c in 但是這種方式修改的字段值都是一樣的。第二種方式 修改資料庫連線配置 allowmultiqueries true 比如 jdbc mysql allowmultiqueries true update test test 1 wh...

Mybatis批量更新插入資料

熊大最近發現乙個批量更新時不用迴圈欄位的更新,跟各位撰碼人分享分享。同為碼農深知碼農不易,勿入坑。好了咱們來說正事兒,來看看這條sql update mydata table set status when then where id in 這無非就是根據id批量修改了mydata table這張表...