直接去看原文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>
结果
完全不知道在这个基础上怎么返回批量新增的主键(路过大佬请指教)