挿入 Mybatisの内部foreach バッチではありません 、これは単一の(巨大になる可能性がある)SQLステートメントであり、欠点があります:
- ここにあるOracleなどの一部のデータベースはサポートしていません。
- 関連するケース:挿入するレコードが多数あり、データベースで構成された制限(デフォルトではステートメントあたり約2000パラメーター)に達し、ステートメント自体が大きくなりすぎると、最終的にDBスタックエラーが発生する可能性があります。
コレクションの反復はmybatisXMLで実行しないでください。単純な挿入を実行するだけです。 Java Foreachのステートメント ループ。最も重要なことは、セッションエグゼキュータタイプです。 。
SqlSession session = sessionFactory.openSession(ExecutorType.BATCH);
for (Model model : list) {
session.insert("insertStatement", model);
}
session.flushStatements();
ここでは、 ExecutorType.REUSEを使用するだけで十分だと思います。 ステートメントをフラッシュせずに。
デフォルトのExecutorType.SIMPLEとは異なり 、ステートメントは1回準備され、挿入するレコードごとに実行されます。