一、更新多条记录的同一个字段为同一个值
UPDATE member SET name='xue' WHERE id in ('id1','id2','id3')
二、更新多条记录为多个字段为不同的值
1、比较普通的写法,是通过循环,依次执行update语句
<update id="batchUpdate">
<foreach collection="list" item="item" index="index" open="" close="" separator=";">
update member
<set>
name = #{item.name}
</set>
where id = #{item.id}
</foreach>
</update>
一条记录update一次,性能比较差,容易造成阻塞。
2、MySQL没有提供直接的方法来实现批量更新,但可以使用case when语法来实现这个功能
update member
set name = case id
when id1 then "li"
when id2 then "zhang"
when id3 then "xue"
end,
set age = case id
when id1 then "11"
when id2 then "12"
when id3 then "13"
end
where id in (id1,id2,id3)
<update id="batchUpdate">
update member
<trim prefix="set" suffixOverrides=",">
<trim prefix="name = case" suffix="end,">
<foreach collection="list" item="item" index="index">
<if test="item.name !=null">
when id=#{item.id} then #{item.name}
</if>
</foreach>
</trim>
<trim prefix="age = case" suffix="end,">
<foreach collection="list" item="item" index="index">
<if test="item.age !=null">
when id=#{item.id} then #{item.age}
</if>
</foreach>
</trim>
</trim>
where id in
<foreach collection="list" item="item" separator="," open="(" close=")">
#{item.id}
</foreach>
</update>
<trim>属性说明
1、prefix,suffix 标识trim标签包裹的部分的签名或者后面添加的内容
2、如果同时又prefixOverrides,suffixOverrides 表示会用prefix,suffix覆盖Overrides的内容
3、如果只有prefixOverrides,suffixOverrides 表示删除开头的或结尾的指定的内容