参考:https://my.oschina.net/ckanner/blog/338515
MySQL没有提供直接的方法来实现批量更新,但可以使用case when语法来实现这个功能。
UPDATE course
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中的配置则如下:
<!-- 批量根据userId增加用户免费提现额度 -->
<update id="batchAddQuota" parameterType="java.util.List">
<!-- 用法参考:https://my.oschina.net/ckanner/blog/338515 -->
update t_user_balance
<trim prefix="set" suffixOverrides=",">
<trim prefix="quota =case" suffix="end,">
<foreach collection="list" item="item" index="index">
<if test="item.userId!=null">
when user_id=#{item.userId} then quota+#{item.quota}
</if>
</foreach>
</trim>
</trim>
where
<foreach collection="list" item="item" index="index" separator="or">
user_id=#{item.userId}
</foreach>
</update>