Mybatis三种常见的批量插入方式比较

本文探讨了Mybatis的三种批量插入方法:反复执行单条插入、XML拼接SQL和批处理执行。批处理在大数据量插入时表现出高效率,而XML拼接SQL在数据量过大时可能报错。循环单条插入虽然效率低,但代码简洁。结论推荐使用批处理执行进行批量插入。

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

mybaits有三种常见的批量插入方式:

  • 反复执行单条插入语句

  • xml拼接sql

  • 批处理执行 

第一种,相当于循环里面反复执行同一条sql语句,当插入的数据量小的时候没啥问题,但是数量超过上千条的时候就效率非常的低。

第二种,不推荐,因为当数量少的时候批量插入没问题,但是当数据量超过500条,或者更多的是时候就直接报错!使用时有大段的xml和sql语句要写,很容易出错,工作效率很低。更关键点是,虽然效率尚可,但是真正需要效率的时候你挂了,要你何用?

第三种,推荐。当批量插入数据量大的时候推荐使用此方法。效率高,使用起来也比较方便。

批处理写法列子:

@Service
public class ItemService {
    @Autowired
    private ItemMapper itemMapper;
    @Autowired
    private SqlSessionFactory sqlSessionFactory;
    //批处理
    @Transactional
    public void add(List<Item> itemList) {
        SqlSession session = sqlSessionFactory.openSession(ExecutorType.BATCH,false);
        ItemMapper mapper = session.getMapper(ItemMapper.class);
        for (int i = 0; i < itemList.size(); i++) {
            mapper.insertSelective(itemList.get(i));
            if(i%1000==999){//每1000条提交一次防止内存溢出
                session.commit();
                session.clearCache();
            }
        }
        session.commit();
        session.clearCache();
    }
   
}

三种方法测试结果:

其中 拼接sql方式在插入500条和1000条时报错(似乎是因为sql语句过长,此条跟数据库类型有关,未做其他数据库的测试):com.microsoft.sqlserver.jdbc.SQLServerException: 传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确,此RPC请求中提供了过多的参数,最多应为2100

结论

循环插入单条数据虽然效率极低,但是代码量极少

xml拼接sql是最不推荐的方式,使用时有大段的xml和sql语句要写,很容易出错,工作效率很低。更关键点是,虽然效率尚可,但是真正需要效率的时候你挂了,要你何用?

批处理执行是有大数据量插入时推荐的做法,使用起来也比较方便。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值