MyBatis的批量更新

MyBatis的批量更新有两种情况:

第一种:更新的字段值都是一样的(具体如下)

<update id="batchDeleteDuty" parameterType="java.util.List">
  	update DUTY set DUTY_NAME = #{dutyName} where DUTY_ID in
  	<foreach collection="dutyIds" item="id" index="index" open="(" close=")" separator=",">
  		#{id}
  	</foreach>
  </update>

这种更新只能将符合条件的记录更新指定字段为相同的值。


第二种:更新是符合条件的记录更新为自己的值(实际也是多个update语句)

1:对于MySQL

修改数据库连接配置:&allowMultiQueries=true

比如:jdbc:mysql://192.168.1.236:3306/test?useUnicode=true&amp;characterEncoding=UTF-8&allowMultiQueries=true

 <update id="batchUpdateDuty" parameterType="java.util.List">
  	<foreach collection="dutyList" item="duty" index="index" open="" close="" separator=";">
  		update DUTY D
  		<set>
  			<if test="duty.dutyClassId != null">
  				D.DUTY_CLASS_ID = #{duty.dutyClassId},
  			</if>
  			<if test="duty.restId != null">
  				D.REST_ID = #{duty.restId},
  			</if>
  		</set>
  		where D.DUTY_ID = #{duty.dutyId}
  	</foreach>
  </update>
这样的更新就可以一次执行多条sql(注意:这是针对MySql的,oracle不适用)

2:对于oracle

直接在xml的Sql前后加上begin end 具体如下:

 <update id="batchUpdateDuty" parameterType="java.util.List">
  	begin
  	<foreach collection="dutyList" item="duty" index="index" open="" close="" separator=";">
  		update DUTY D
  		<set>
  			<if test="duty.dutyClassId != null">
  				D.DUTY_CLASS_ID = #{duty.dutyClassId},
  			</if>
  			<if test="duty.restId != null">
  				D.REST_ID = #{duty.restId},
  			</if>
  		</set>
  		where D.DUTY_ID = #{duty.dutyId}
  	</foreach>
  	;end;
  </update>


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值