2025-08-29

2025-08-28  本文已影响0人  风一样的存在

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

<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。

上一篇 下一篇

猜你喜欢

热点阅读