mybatis批量插入数据list超过一定长度时报错的解决办法(批量插入数据,数据过多时报错解决和批量修改报错

在使用MyBatis进行批量新增时,如果数据量较大,可以考虑分批次插入以减少数据库的负载压力。这里提供一种基于MyBatis的分批次插入的方法:

  1. 创建一个新的Mapper XML文件(例如:BatchInsertMapper.xml)来定义批量插入的SQL语句。在该XML文件中,添加如下内容:
<!-- 参数为List类型,使用foreach循环插入每个对象 -->
<insert id="batchInsert" parameterType="java.util.List">
  INSERT INTO your_table (column1, column2, ...)
  VALUES
  <foreach collection="list" item="item" separator=",">
    (#{item.property1}, #{item.property2}, ...)
  </foreach>
</insert>

 

请将上述代码中的your_table替换为你的目标表名,并根据实际情况指定要插入的列和属性。

        2.在对应的Mapper接口中声明批量插入的方法。添加如下代码:

public interface YourMapper {
  void batchInsert(List<YourEntity> entities);
}

 请将上述代码中的YourMapper替换为你的Mapper接口名和YourEntity替换为你的实体类名。

          3.在你的服务类或其他逻辑代码中,注入该Mapper并调用批量插入方法。例如:

@Autowired
private YourMapper yourMapper;

public void batchInsertData(List<YourEntity> dataList) {
  int batchSize = 1000; // 指定每批次插入的数据量

  for (int i = 0; i < dataList.size(); i += batchSize) {
    int endIndex = Math.min(i + batchSize, dataList.size());
    List<YourEntity> batchList = dataList.subList(i, endIndex);

    yourMapper.batchInsert(batchList);
  }
}

实话实说优化效率嘎嘎的,看数据量的大小,如果每条数据的数据量很大,建议把batchSize改的小一点。

请将上述代码中的YourEntity替换为你的实体类名,并根据需要调整batchSize的大小。

这样,通过循环遍历将数据列表分割为批次,并调用批量插入的方法,就可以实现分批次插入的功能。

希望对你有所帮助!

如果说是批量修改报错,

eg:update d_access_history_page set line_name = ? where line_id = ? ; update d_access_page set line_name = ? where line_id = ? ;
这种报错,报错是因为没有开启批量更新,不开启批量更新只允许操作一条,想要批量操作就要在数据库配置文件中的url后边增加&allowMultiQueries=true(在数据的配置后面加上他eg:

mysql.db-name}?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false&allowMultiQueries=true )

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值