sql >> データベース >  >> RDS >> Oracle

foreachを使用してmybatisでバッチ挿入を行う

    挿入 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回準備され、挿入するレコードごとに実行されます。



    1. 「エラー1054(42S22):MariaDBの「orderclause」の不明な列「colname」」を修正しました

    2. WindowsにMySQLc++ドライバーをインストールする方法

    3. 従業員テーブルMySQLの最大および2番目の最大給与を検索する

    4. Rails5.2Postgresql上のUUIDを使用したActiveStorage