问题:插入新数据无法回填所有记录的主键,只回填第一条记录
<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。