解决批量新增返回自增主键问题

问题:插入新数据无法回填所有记录的主键,只回填第一条记录

<insert id="insertBatch" useGeneratedKeys="true" keyProperty="id">
    INSERT INTO t_rate_plan_mapping 
        (meal_type, meal_unit, cancel_policy)
    VALUES
        <foreach collection="list" item="item" separator=",">
            (
                #{item.mealType},
                #{item.mealUnit},
                #{item.cancelPolicy}
            )
        </foreach>
</insert>

解决方案:

jdbc:mysql://host:port/db?useSSL=false&useAffectedRows=false&rewriteBatchedStatements=true

useAffectedRows=false:禁用“受影响行数”模式(默认可能为 true),确保返回正确的生成 ID(否则批量插入时可能只返回 1 条影响的 ID)。
rewriteBatchedStatements=true:启用 JDBC 批量语句重写(将 foreach 生成的多个 VALUES 合并为 VALUES (...),(...) 的一条 SQL),提升性能并支持回填所有 ID。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容