SQLのMySQLの実装:
INSERT DELAYED INTO SYS_JOB_WORK(JNL_NO、WORK_DT) VALUES (1、' AAS ' )、 (2、' FFFF ');
MyBatisの対応のsql:
< 挿入 ID = "insertList"のParameterType = "java.util.Listに" useGeneratedKeys = "偽" > INSERT INTO SYS_JOB_WORK( JNL_NO、 WORK_DT )VALUES < foreachのコレクション= "jobWorks"項目= "jobWork" インデックス= " インデックス "セパレータ=を "" > ( #{jobWork.jnlNo、jdbcType = VARCHAR }、 #{jobWork.workDate、jdbcType =VARCHAR } ) </ foreachの> SELECT 1 FROM DUAL </ インサート>
SQLのOracle実装:
INSERT ALL INTO SYS_JOB_WORK(JNL_NO、WORK_DT)VALUES(' 1 '、' 2019年4月21日' ) INTO SYS_JOB_WORK(JNL_NO、WORK_DT)VALUES(' 2 '、' 2019年4月21日' ) INTO SYS_JOB_WORK(JNL_NO、WORK_DT )VALUES(' 3 '、' 2019年4月21日' ) SELECT 1 FROM DUALと、
MyBatisの対応のsql:
スキーム1:以下のデータは、非効率的な500より大きいこのように、このように、データは、好ましくは500以下であります
< 挿入 IDは= "insertList" ParameterTypeが= "java.util.Listに" useGeneratedKeys = "偽" > INSERT ALL < foreachのコレクション= "jobWorks"項目= "jobWork" インデックス= " インデックスを " > INTO (SYS_JOB_WORK JNL_NO、 WORK_DT )VALUES ( #{jobWork.jnlNo、jdbcType = VARCHAR }、 #{jobWork.workDate、jdbcType = VARCHAR } ) </ foreachの> SELECT 1 FROM DUAL </ インサート>
スキーム2は、補間バッチを有効に、タグは、すべてダミーデータUNIONによって生成された設定パラメータのリストを利用します
< 挿入 ID = "insertList"のParameterType = "java.util.Listに" > INSERT INTO SYS_JOB_WORK(JNL_NO、WORK_DT)が 選択 A.を* から( < foreachのコレクション= "jobWorks"項目= "jobWork" インデックス= " インデックス "セパレータ= " UNION ALL " > 選択 #{jobWork.jnlNo、jdbcType = VARCHAR }、 #{jobWork.workDate、jdbcType = VARCHAR } デュアル </ foreachの> )A </ 挿入>
スキーム3:保存された手順を用いて一括挿入
< 挿入 ID = "insertList"のParameterType = "java.util.Listにする" > 開始 < foreachのコレクション= "jobWorks"項目= "jobWork" インデックス= " インデックス " > INSERT INTO SYS_JOB_WORK(JNL_NO、WORK_DT) の値( #{jobWork。 jnlNo、jdbcType = VARCHAR }、 #{jobWork.workDate、jdbcType = VARCHAR } )。 </ foreachの> 終わり; <