MyBatis实现Oracle中使用foreach标签实现批量插入数据以及主键自增

发布于:2024-05-17 ⋅ 阅读:(150) ⋅ 点赞:(0)

直接去看原文MyBatis实现Oracle中使用foreach标签实现批量插入数据以及主键自增

1.先看表结构

T_ATOM_REPORT_FORMULA_ITEM
在这里插入图片描述
T_ATOM_REPORT_FORMULA
在这里插入图片描述

2.前端入参

在这里插入图片描述
在这里插入图片描述

3.后端在插入T_ATOM_REPORT_FORMULA表数据同时批量插入T_ATOM_REPORT_FORMULA_ITEM

在实现层调用mapper
在这里插入图片描述

在mapper里面有一个批量新增并想返回主键的不会写(求大佬留言指教)

    void insertData(@Param("argumentList") List<AtomReportFormulaItem> argumentList);
//    批量新增并返回主键(fail)
//    long insertDataRetrunId(@Param("argumentList") List<AtomReportFormulaItem> argumentList);

在xml中一开始写了一个错误的,不知道为啥

    <insert id="insertData">
        insert into T_ATOM_REPORT_FORMULA_ITEM (ITEM_ID,FORMULA_ID, ITEM_NAME, ITEM_DESC, ITEM_ORDER)
        <foreach collection="argumentList" item="item" open="(" separator=" union all " close=")">
            select seq_T_ATOM_REPORT_FORMULA_ITEM.nextval as ITEM_ID,#{item.formulaId}, #{item.itemName}, #{item.itemDesc}, #{item.itemOrder}from dual
        </foreach>
    </insert>

正确答案

  <insert id="insertData">
        insert into T_ATOM_REPORT_FORMULA_ITEM
        (ITEM_ID,FORMULA_ID, ITEM_NAME, ITEM_DESC, ITEM_ORDER)
        select seq_T_ATOM_REPORT_FORMULA_ITEM.nextval,t.* from(
            <foreach collection="argumentList" item="item" open="(" separator=" union all " close=")">
                select  #{item.formulaId}, #{item.itemName}, #{item.itemDesc}, #{item.itemOrder}from dual
            </foreach>
        ) t
    </insert>

结果
完全不知道在这个基础上怎么返回批量新增的主键(路过大佬请指教)


网站公告

今日签到

点亮在社区的每一天
去签到