Mybatis的XML寫法如下:
<update id="updateList" parameterType="java.util.List">
<foreach collection="list" item="item" index="index" open="" close="" separator=";">
update tab
<set>
name=${item.name}
</set>
where id = ${item.id}
</foreach>
</update>
一條記錄update一次,性能比較差,容易造成阻塞。
MySQL沒有提供直接的方法來實現批量更新,但可以使用case when語法來實現這個功能。
UPDATE tab
SET name = CASE id
WHEN 1 THEN 'name1'
WHEN 2 THEN 'name2'
WHEN 3 THEN 'name3'
END,
title = CASE id
WHEN 1 THEN 'New Title 1'
WHEN 2 THEN 'New Title 2'
WHEN 3 THEN 'New Title 3'
END
WHERE id IN (1,2,3)
這條sql的意思是,如果id爲1,則name的值爲name1,title的值爲New Title1;依此類推。
所以在Mybatis中這麼寫
update tab
set name =
<foreach collection="list" item="item" index="index"
separator=" " open="case" close="end,">
when id = #{item.id} then #{item.name}
</foreach>
where id in
<foreach collection="list" index="index" item="item" separator="," open="(" close=")">
#{item.id}
</foreach>