项目中要做一个批量更新,有两种实现方式:
1、代码遍历更新
效率低
2、sql语句批量更新
因为使用的是mybatis
<update id="updateByAll" parameterType="java.util.List">
update table
<trim prefix="set" suffixOverrides=",">
<trim prefix="value = case" suffix="end,">
<foreach collection="list" item="item" index="index">
<if test="item.value !=null and item.value != '' ">
when id=#{item.id} then #{item.value}
</if>
<if test="item.value == null or item.value == '' ">
when id=#{item.id} then table.value
</if>
</foreach>
</trim>
</trim>
where id in
<foreach collection="list" index="index" item="item" separator="," open="(" close=")">
#{item.id,jdbcType=VARCHAR}
</foreach>
</update>
达到的效果是:
update transfer_time_roder set value_content = case when id=? then ? when id=? then ? when id=? then ? when id=? then ? end where list_id in ( ? , ? , ? , ? ) and id in ( ? , ? , ? , ? )
==> Parameters: 1(String), new1(String), 2(String), new2(String), 3(String), new3(String), 4(String), new4(String), 9999(String), 9999(String), 9999(String), 9999(String), 1(String), 2(String), 3(String), 4(String)
<== Updates: 4