MySQL implementation of SQL:
INSERT DELAYED INTO SYS_JOB_WORK (JNL_NO, WORK_DT ) VALUES (1, 'aas'), (2, 'ffff');
Mybatis correspondence sql:
<insert id="insertList" parameterType="java.util.List" useGeneratedKeys="false"> INSERT INTO SYS_JOB_WORK( JNL_NO, WORK_DT ) VALUES <foreach collection="jobWorks" item="jobWork" index="index" separator=","> ( #{jobWork.jnlNo, jdbcType=VARCHAR}, #{jobWork.workDate, jdbcType=VARCHAR} ) </foreach> SELECT 1 FROM DUAL </insert>
Oracle implementation of SQL:
INSERT ALL INTO SYS_JOB_WORK( JNL_NO, WORK_DT ) VALUES ('1','2019-04-21') INTO SYS_JOB_WORK( JNL_NO, WORK_DT ) VALUES ('2','2019-04-21') INTO SYS_JOB_WORK( JNL_NO, WORK_DT ) VALUES ('3','2019-04-21') SELECT 1 FROM DUAL;
Mybatis correspondence sql:
Scheme 1: in this way the following data is larger than the inefficient 500, the data in this way is preferably not more than 500
<insert id="insertList" parameterType="java.util.List" useGeneratedKeys="false"> INSERT ALL <foreach collection="jobWorks" item="jobWork" index="index"> INTO SYS_JOB_WORK( JNL_NO, WORK_DT ) VALUES ( #{jobWork.jnlNo, jdbcType=VARCHAR}, #{jobWork.workDate, jdbcType=VARCHAR} ) </foreach> SELECT 1 FROM DUAL </insert>
Scheme 2 utilizing a tag, a list of the parameters set generated by the dummy data UNION ALL, enabling interpolation batch
<insert id="insertList" parameterType="java.util.List"> INSERT INTO SYS_JOB_WORK( JNL_NO, WORK_DT) select A.* from ( <foreach collection="jobWorks" item="jobWork" index="index" separator="UNION ALL"> select #{jobWork.jnlNo, jdbcType=VARCHAR}, #{jobWork.workDate, jdbcType=VARCHAR} from dual </foreach>) A </insert>
Scheme 3: using stored procedures bulk insert
<insert id="insertList" parameterType="java.util.List"> begin <foreach collection="jobWorks" item="jobWork" index="index"> INSERT INTO SYS_JOB_WORK( JNL_NO, WORK_DT) values ( #{jobWork.jnlNo, jdbcType=VARCHAR}, #{jobWork.workDate, jdbcType=VARCHAR} ); </foreach> end; </insert>