提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
我们经常会在业务方面实现批量插入,批量修改等操作,如果数据量大在业务层去循环插入的话会造成严重的性能消耗,下面我们直接看一下如何在Mybatis中批量插入、修改,合理完成批量操作。
提示:以下是本篇文章正文内容,下面案例可供参考
一、批量插入
<insert id="insertBatch">insertinto T(id,create_user,create_time,update_user,update_time)values<foreach collection="list" item="item" separator=",">(#{item.id},#{item.createUser},#{item.createTime},#{item.updateUser},#{item.updateTime})</foreach></insert>
二、批量修改
1.批量修改指定行为相同数据
代码如下(愣头青版):
<update id="updateBatch">update T tset t.update_user=#{item.updateUser},t.update_time = #{item.updateTime}where<foreach collection="list" item="item"index="index"open="id in (" separator=","close=")">#{item.id}</foreach></update>
代码如下(优化版,可以加一些联合查询比如第三个IF和非空校验之类的):
<update id="updateBatch">update T t<trim prefix="set" suffixOverrides=","><foreach collection="list" item="item"index="index"><if test="item.updateUser != null">t.update_user=#{item.updateUser},</if><if test="item.updateTime != null">t.update_time=#{item.updateTime},</if><if test="item.location != null">t.location_name=(SELECT area_nameFROM t_areaWHERE id= item.location),</if></foreach></trim>where<foreach collection="list" item="item"index="index"open="id in (" separator=","close=")">#{item.id}</foreach></update>
2.修改不同行为不同数据
代码如下(愣头青版【数据多性能消耗巨大】):
<update id="updateBatch"><foreach collection="list" item="item"index="index"open="id in (" separator=","close=")">update T tset t.update_user=#{item.updateUser},t.update_time = #{item.updateTime}where
id=#{item.id}</foreach></update>
代码如下(优化版):
<update id="updateBatch">update T t<trim prefix="set" suffixOverrides=","><trim prefix="t.updateTime = case" suffix="end,"><foreach collection="list" item="item"index="index"><if test="item.updateTime != null">when t.id=#{item.id} then #{item.updateTime}</if></foreach></trim><trim prefix="t.updateBy = case" suffix="end,"><foreach collection="list" item="item"index="index"><if test="item.updateBy != null">when t.id=#{item.id} then #{item.updateBy}</if></foreach></trim><trim prefix="t.remark = case" suffix="end,"><foreach collection="list" item="item"index="index"><if test="item.remark != null">when t.id=#{item.id} then #{item.remark}</if></foreach></trim></trim>where<foreach collection="list" item="item"index="index"open="t.id in (" separator=","close=")">#{item.id}</foreach></update>