mybatis froeach批量插入

文章展示了如何通过批量插入和循环处理来优化数据导入效率,每1000条记录进行一次插入。代码中使用了Mapper接口和XML配置来执行SQL。在较弱的硬件环境下,3万条数据的插入耗时约5秒,CPU使用率在操作结束后需要一段时间下降。注意避免在Foreach语句中的参数绑定错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     //5.循环插入详情表
        for (Map mapc : byFwc) {
            UfSckgdDt1 ufSckgdDt1 = JSON.parseObject(JSON.toJSONString(mapc), UfSckgdDt1.class);
            UfSckgdDt1List.add(ufSckgdDt1);
            if(UfSckgdDt1List.size() % 1000 ==0){
                int ii = ufSckgdDt1Mapper.insertUfSckgdDt1List(UfSckgdDt1List);
                c=c+ii;
                UfSckgdDt1List.clear();
            }
            //int ii = ufSckgdDt1Mapper.insertUfSckgdDt1(ufSckgdDt1);

        }
        // 最后插入剩余的数据
        if(!CollectionUtils.isEmpty(UfSckgdDt1List)) {
            int ii = ufSckgdDt1Mapper.insertUfSckgdDt1List(UfSckgdDt1List);
            c=c+ii;
        }

1000条插入一次,客根据自身运行环境更改。

dao层

    public int insertUfSckgdDt1List(@Param("list") List<UfSckgdDt1> list);

mapper.xml

 <insert id="insertUfSckgdDt1List" parameterType="java.util.List">
        INSERT INTO uf_sckgd_dt1 ( id ,
                                   mainid ,
                                   dj ,
                                   scfl ,
                                   ppggxh ,
                                   bz ,
                                   jldw ,
                                   scpm ,
                                   sclb ,
                                   mxid ,
                                   scbm ,
                                   xl ,
                                   pp ,
                                   htbh ,
                                   ghsxx ,
                                   scdl ,
                                   scxl ,
                                   tjlb ,
                                   tjjldw ,
                                   zhxs )
        VALUES
        <foreach collection="list" item="item" index="index" separator=",">
            (#{item.id},
            #{item.mainid},
            #{item.dj},
            #{item.scfl},
            #{item.ppggxh},
            #{item.bz},
            #{item.jldw},
            #{item.scpm},
            #{item.sclb},
            #{item.mxid},
            #{item.scbm},
            #{item.xl},
            #{item.pp},
            #{item.htbh},
            #{item.ghsxx},
            #{item.scdl},
            #{item.scxl},
            #{item.tjlb},
            #{item.tjjldw},
            #{item.zhxs})

        </foreach >
    </insert>

我本地机器比较次,不到3万运行了5秒,注意观察自己CPU使用率,我的结束20多秒才降下来。

注意批量插入froeach语句写法,容易出现param0参数绑定补上的错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值