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 的写法,感兴趣的话可以自行百度,有很多重复的文章。
不扯了,就这样。