mybatis学会这个技巧,每天多出两个小时摸鱼时间(mybatis批量新增)

事情起因

今天上班刚坐下就听见了同事的哀嚎,于是就有了下面的对话

  • 小白:啊啊啊啊啊,昨天晚上谁动我电脑了,我数据白跑了,今天又要跑一天数据。
  • 我:怎么了?刚上班就崩溃啦
  • 小白:我昨天晚上跑的数据没有跑完,今天又要重新跑,估计今天又要加班了。
  • 我:怎么回事,我给看看

于是我看了下他写得代码,业务还是蛮简单的,从A库查出数据,然后处理一下存入B库中,数据量大概有十万条左右,每次跑数据要两个小时左右。我一看代码就知道为什么需要这么久了,他代码里面是每查出一条数据然后插入一条,频繁的与数据库建立连接,当然慢啦
于是我把他代码优化了一下,不需要每次插入与数据库建立连接,而是批量插入,代码如下:

mybatis批量插入
mapper接口层
public void insertAll(@Param("list")List<User> users);
xml层
<insert id="insertAll" parameterType="List">
        insert into zjb_crk(vfid,vgsdm,vdjh,vxmh,vydlx,vwlbm,vpch,nsl,vjldw,nje,vhblx, nzhhl, ccrkrq,dcjrq, dxgrq,vjldwid,vhblxid)
        select A.*
        from(
        <foreach collection="list" item="item" separator="union all" >
            select
            #{item.vfid} vfid,#{item.vgsdm} vgsdm,#{item.vdjh} vdjh,#{item.vxmh} vxmh,#{item.vydlx} vydlx,#{item.vwlbm} vwlbm,#{item.vpch} vpch,#{item.nsl} nsl,#{item.vjldw} vjldw,#{item.nje} nje,#{item.vhblx} vhblx,#{item.nzhhl} nzhhl,#{item.ccrkrq} ccrkrq,#{item.dcjrq} dcjrq,#{item.dxgrq} dxgrq,#{item.vjldwid} vjldwid,#{item.vhblxid} vhblxid
            from dual
        </foreach>
        )A
    </insert>

经过我的改造,从以前的两个小时优化到两分钟左右,又是深藏功与名的一天呢。
PS:上面的代码是批量插入到oracle数据库的代码,下面的插入到Mybatis的代码,接口层是一样的


<insert id="batchInsert" parameterType="java.util.List">
    insert into user ( age, create_user_id )
    values 
     <foreach item="item" collection="list" separator="," index="index">
       ( #{item.age},  #{item.createUserId} )
     </foreach>
</insert>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值