Mybatis批量更新优化方案

在工作的时候发现了Mybatisplus自带的更新操作在数据量大的表中时非常慢,可以使用多线程来完成,但是实现不了多线程的事务回滚

因为是sqlServer数据库,没有mysql的&rewriteBatchedStatements=true的属性,executeBatch()的批处理也没用

需要自己手写:


<update id="updateBatchByIdMy" parameterType="java.util.List" keyProperty="id">  
update CFG_CON_SUBJECTPARAM_INFO  
<trim prefix="set" suffixOverrides=",">  
<trim prefix="CONID = case id" suffix="end,">  
<foreach collection="list" item="item" index="index">  
when #{item.id} then #{item.conid}  
</foreach>  
</trim>  
<trim prefix="SUBJECTID = case id" suffix="end,">  
<foreach collection="list" item="item" index="index">  
when #{item.id} then #{item.subjectid}  
</foreach>  
</trim>  
<trim prefix="OUTTEMP = case id" suffix="end,">  
<foreach collection="list" item="item" index="index">  
when #{item.id} then #{item.outtemp}  
</foreach>  
</trim>  
<trim prefix="SUPTEMP = case id" suffix="end,">  
<foreach collection="list" item="item" index="index">  
when #{item.id} then #{item.suptemp}  
</foreach>  
</trim>  
<trim prefix="RETTEMP = case id" suffix="end,">  
<foreach collection="list" item="item" index="index">  
when #{item.id} then #{item.rettemp}  
</foreach>  
</trim>  
<trim prefix="AVGTEMP = case id" suffix="end,">  
<foreach collection="list" item="item" index="index">  
when #{item.id} then #{item.avgtemp}  
</foreach>  
</trim>  
<trim prefix="DIFFTEMP = case id" suffix="end">  
<foreach collection="list" item="item" index="index">  
when #{item.id} then #{item.difftemp}  
</foreach>  
</trim>  
where id in  
<trim>  
<foreach collection="list" item="item" index="index" open="(" separator="," close=")">  
#{item.id}  
</foreach>  
</trim>  
</trim>

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值