springboot+mybatis批量插入数据+小问题

之前一直动手用过mybatis,这次刚好项目需要,做了个小项目,但是我没发现myBatista的批量插入数据的接口,可能是没找到,也或许真的没有。然后网上找了个方式如下:
在xml文件中这样写

<insert id="addDataBach"parameterType="arraylist">
        INSERT INTO eimm_basic_enterprise_power ([id], [userCode], [userName], [yearAndMonth], [zcbh], [yearDj], [mothDj], [createTime],[guiShang],[totalYd])
        VALUES
        <foreach collection="bascBatch" item="ba" separator=",">
        (#{ba.id}, #{ba.userCode}, #{ba.userName}, #{ba.yearAndMonth}, #{ba.zcbh}, #{ba.yearDj}, #{ba.mothDj}, #{ba.createTime},#{ba.guiShang},#{ba.totalYd})
        </foreach>
         </insert>

以上可以进行批量对象保存了,但是会发现一个小问题,当一个集合包含过多对象,或者一个对象字段很多时候,会报一个错误,大意就是 总共的参数长度,不能超过2100个字符。
然后我的解决方式是:直接用2100除以 我性需要保存的对象的字段数,取整结果就是一次批量最多支持集合对象数,处理逻辑如下:

public int addDataBach(List<BasicEnterprisePower> basicList) {
        List<BasicEnterprisePower> batchList = new ArrayList<>();
        System.out.println("基础数据批量保存:"+basicList.size());
        int i=0;
        for (BasicEnterprisePower ba:basicList) {
            batchList.add(ba);
            if(++i% CommonEnv.basic_parm_num ==0) {
                basicEnterprisePowerMapper.addDataBach(batchList);
                batchList.clear();
                continue;
            }
            if(basicList.size()==i) {
                basicEnterprisePowerMapper.addDataBach(batchList);
            }
        }
        return i;
    }

由于时间紧张,这个批量处理暂时就用的这个方法了,其中的CommonEnv.basic_parm_num就是通过计算出来一次最多支持保存的对象数,这样显得不太灵活,还没有时间设计更好的处理方式。
不过通过测试 这样批量处理处理已经比循环单条处理快6倍左右(这里用的3万条数据测试)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值