mybatis批量更新

990 阅读1分钟

今天开发时,遇到一个批量数据更新的问题,由于数据量较大,担心数据库连接问题,所以没有采用在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>

实测,在相同数据量的情况下,第二种比第一种效率高出不少