Java 批量往数据库插入数据,提示服务器最多接收多少参数

问题场景

批量往数据库插入数据时,提示服务器接收参数过多,服务器最多接收2100参数。
此时用2100除以实体中的字段数量,可以得出每次commit的个数。

  1. 不大于这个阈值的时候,可以直接通过mapper.xml批量插入;
  2. 大于这个阈值的时候,可以分批次批量插入数据。

Java代码

int resultInt = 0;
int batchCount = 90; // 每批commit的个数
int batchLastIndex = batchCount;// 每批最后一个的下标
for (int index = 0; index < list.size(); ) {
    
    
	if (batchLastIndex >= list.size()) {
    
    
		batchLastIndex = list.size();
		resultInt = resultInt * userDao.insertByList(list.subList(index, batchLastIndex));
		break;// 数据插入完毕,退出循环
	} else {
    
    
		resultInt = resultInt * userDao.insertByList(list.subList(index, batchLastIndex));
		index = batchLastIndex;// 设置下一批下标
		batchLastIndex = index + (batchCount - 1);
	}
}

mapper.xml 代码

<insert id="insertByList">
	insert into user
		(Id, Code, TimePoint, MaxValue, MonValue)
	values
	<foreach collection="list" item="item" index="index" separator=",">
		(#{item.id}, #{item.Code}, #{item.timePoint}, #{item.maxValue}, #{item.monValue})
	</foreach>
</insert>

原文借鉴:关于MyBatis批量插入SqlServer报:RPC 请求中提供了过多的参数。最多应为 2100。

猜你喜欢

转载自blog.csdn.net/qq_44726330/article/details/129148554