You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MyBatis中结合INSERT INTO SELECT与foreach批量插入数据?

解决方案:MyBatis结合foreach实现批量插入关联列表元素的需求

可以通过MyBatis的<foreach>标签结合SQL的UNION ALL来实现你的需求,核心思路是遍历元素列表,为每个元素生成对应的查询语句,再将所有查询结果合并作为插入的数据源。

正确的MyBatis映射器代码示例

<insert id="batchInsertWithElements">
    INSERT INTO new_table
    (
        order_pnr_id,
        order_id,
        reference_ticket_id,
        new_element
    )
    <foreach item="elem" collection="elements" separator="UNION ALL">
        SELECT
            order_pnr_id,
            order_id,
            reference_ticket_id,
            #{elem} AS new_element
        FROM
            ticket
        WHERE
            order_id = 1
    </foreach>
</insert>

代码说明

  • <foreach>标签的separator设为UNION ALL,每个元素对应的SELECT语句会被合并成一个完整的结果集。
  • 每个SELECT语句中,通过#{elem} AS new_element将列表元素作为新字段的值,MyBatis会自动完成参数绑定,避免SQL注入风险。
  • 假设ticket表中order_id=1有N条数据,最终会插入N×4条数据(对应列表的4个元素)。

注意事项

  • 如果元素列表可能为空,建议在调用前先判断列表是否非空,避免生成无效SQL。
  • 需确保列表元素的类型与new_element字段的数据类型匹配。

内容的提问来源于stack exchange,提问作者Robin Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 21:22:35