Mybatis批量插入、修改怎么做?

2022-07-13 08:29:26

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

我们经常会在业务方面实现批量插入,批量修改等操作,如果数据量大在业务层去循环插入的话会造成严重的性能消耗,下面我们直接看一下如何在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>


  • 作者:破烂码农
  • 原文链接:https://blog.csdn.net/weixin_43848873/article/details/124015203
    更新时间:2022-07-13 08:29:26