sql语法-批量插入

Oracle UNION ALL

sql 复制代码
<insert id="saveBatchFile">
    INSERT INTO foundation.comm_file (
        id, name, file_format, file_type_id, function_type,
        module_data_id, function_data_id, function_data_name,
        stage_type, file_token, sort_order, row_version,
        is_delete, create_by, create_dt, update_by, update_dt
    )
    <foreach collection="list" item="item" index="index" separator="UNION ALL">
        SELECT
            #{item.id,jdbcType=BIGINT},
            #{item.name,jdbcType=VARCHAR},
            #{item.fileFormat,jdbcType=VARCHAR},
            #{item.fileTypeId,jdbcType=BIGINT},
            #{item.functionType,jdbcType=BIGINT},
            #{item.moduleDataId,jdbcType=VARCHAR},
            #{item.functionDataId,jdbcType=BIGINT},
            #{item.functionDataName,jdbcType=VARCHAR},
            #{item.stageType,jdbcType=BIGINT},
            #{item.fileToken,jdbcType=VARCHAR},
            #{item.sortOrder,jdbcType=BIGINT},
            #{item.rowVersion,jdbcType=BIGINT},
            #{item.isDelete,jdbcType=TINYINT},
            #{item.createBy,jdbcType=BIGINT},
            #{item.createDt,jdbcType=TIMESTAMP},
            #{item.updateBy,jdbcType=BIGINT},
            #{item.updateDt,jdbcType=TIMESTAMP}
        FROM dual
    </foreach>
</insert>

语法

sql 复制代码
INSERT INTO comm_file (...)
SELECT ... FROM dual
UNION ALL
SELECT ... FROM dual
UNION ALL
SELECT ... FROM dual;

ORACLE INSERT ALL

sql 复制代码
<insert id="saveBatchFile">
    INSERT ALL
    <foreach collection="list" item="item" index="index">
        INTO foundation.comm_file (
            id, name, file_format, file_type_id, function_type,
            module_data_id, function_data_id, function_data_name,
            stage_type, file_token, sort_order, row_version,
            is_delete, create_by, create_dt, update_by, update_dt
        ) VALUES (
            #{item.id,jdbcType=BIGINT},
            #{item.name,jdbcType=VARCHAR},
            #{item.fileFormat,jdbcType=VARCHAR},
            #{item.fileTypeId,jdbcType=BIGINT},
            #{item.functionType,jdbcType=BIGINT},
            #{item.moduleDataId,jdbcType=VARCHAR},
            #{item.functionDataId,jdbcType=BIGINT},
            #{item.functionDataName,jdbcType=VARCHAR},
            #{item.stageType,jdbcType=BIGINT},
            #{item.fileToken,jdbcType=VARCHAR},
            #{item.sortOrder,jdbcType=BIGINT},
            #{item.rowVersion,jdbcType=BIGINT},
            #{item.isDelete,jdbcType=TINYINT},
            #{item.createBy,jdbcType=BIGINT},
            #{item.createDt,jdbcType=TIMESTAMP},
            #{item.updateBy,jdbcType=BIGINT},
            #{item.updateDt,jdbcType=TIMESTAMP}
        )
    </foreach>
    SELECT 1 FROM dual
</insert>
sql 复制代码
INSERT ALL
  INTO users (id, name) VALUES (1, 'A')
  INTO users (id, name) VALUES (2, 'B')
SELECT 1 FROM DUAL;

mysql

sql 复制代码
<insert id="batchInsertUsers">
    INSERT INTO users (id, name, age)
    VALUES
    <foreach collection="list" item="user" separator=",">
        (#{user.id}, #{user.name}, #{user.age})
    </foreach>
</insert>
sql 复制代码
INSERT INTO users (id, name, age)
VALUES 
  (1001, 'Alice', 25),
  (1002, 'Bob', 30),
  (1003, 'Charlie', 35);