Mybatis批量更新(MySQL)

2018-08-15  本文已影响20人  瓜尔佳_半阙

MySQL批量update

参数为List<T>

<update id="batchUpdateEmployerMissionTypeInfoByOrder" parameterType="java.util.List">
        update employer_mission_type_manage
        <trim prefix="set" suffixOverrides=",">
            <trim prefix="type_order=case" suffix="end,">
                <foreach collection="list" item="item" index="index">
                    <if test="item.typeId!=null">
                        when type_id=#{item.typeId} then #{item.typeOrder}
                    </if>
                </foreach>
            </trim>
        </trim>
        where type_id in
        <foreach collection="list" item="item" separator="," open="(" close=")">
            #{item.typeId,jdbcType=INTEGER}
        </foreach>
    </update>

这只是mysql批量更新的一种写法,上述sql也可以写成直接将 update 语句放到<foreach>块中去执行的方式,这种方式会产生多条 update 语句。有的文章说多条update语句会比本文开始的那种方式快,当然也有人说本文一开始的写法好,我也不知道哪个好,只是因为这个方法写着麻烦,所以我记录一下。
在本文中的update语句的where条件里,也可以写成如下形式:

        where 
        <foreach collection="list" item="item" separator="or">
            type_id = #{item.typeId,jdbcType=INTEGER}
        </foreach>

这种用 or 的写法据说会影响性能,所以本文采用的是 in 的写法,感兴趣的话可以自行百度,有很多重复的文章。
不扯了,就这样。

参考:https://blog.csdn.net/xyjawq1/article/details/74129316/

上一篇下一篇

猜你喜欢

热点阅读