Java はデータベースにデータをバッチで挿入し、サーバーに最大数のパラメータを受け取るよう要求します。

問題のシナリオ

バッチでデータベースにデータを挿入すると、サーバーに多すぎるパラメーターを受信するように求めるメッセージが表示されます。サーバーは最大 2100 個のパラメーターを受信できます。
この時点で、2100 をエンティティ内のフィールドの数で割って、毎回のコミット数を取得します。

  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