今天开发时,遇到一个批量数据更新的问题,由于数据量较大,担心数据库连接问题,所以没有采用在java中用代码实现,下面是我两种实现方式的代码:
- 第一种:写多条sql,用“;”分隔
<update id="updateBatch" parameterType="java.util.List">
<foreach collection="list" item="item" index="index" separator=";">
UPDATE log
SET `file` = #{item.file},
update_time = #{item.updateTime}
WHERE
id = #{item.id}
</foreach>
</update>
- 第二种:通过case-when语句
<update id="updateBatch" parameterType="java.util.List" >
update log
<trim prefix="set" suffixOverrides=",">
<trim prefix="file=case" suffix="end,">
<foreach collection="list" item="i" index="index">
<if test="i.file != null and i.file != ''">
when id=#{i.id} then #{i.file}
</if>
</foreach>
</trim>
<trim prefix="update_time=case" suffix="end,">
<foreach collection="list" item="i" index="index">
<if test="i.updateTime != null">
when id=#{i.id} then #{i.updateTime}
</if>
</foreach>
</trim>
</trim>
where id in
<foreach collection="list" separator="," open="(" close=")" item="i" index="index" >
#{i.id}
</foreach>
</update>
实测,在相同数据量的情况下,第二种比第一种效率高出不少