oracle的批量插入方式是:
insert into db(id, zgbh, shbzh)
select '1', '2', '3' from dual
union all select '2', '3', '4' from dual
union all select '3', '4', '5' from dual
union all select '4', '5', '6' from dual
union all select '5', '6', '7' from dual
由于项目使用到sequence生成id,刚开始的写法:
<!-- 批次插入,List-->
<insert id="insertList" useGeneratedKeys="true" parameterType="java.util.List">
<selectKey resultType="long" keyProperty="id" order="BEFORE">
SELECT SEQ_xxx_DETAIL.NEXTVAL FROM DUAL
</selectKey>
insert into TBL_xxx_DETAIL
(
<include refid="allColumns"/>
)
<foreach collection="list" item="item" index="index" separator="UNION ALL" >
SELECT
#{id, jdbcType=NUMERIC javaType=long},
#{item.batchFun

本文探讨了在Mybatis中使用foreach进行批次插入时遇到的sequence查询问题。原先的方式会导致所有插入对象使用同一ID,违反主键唯一性。通过调整SQL,将foreach生成的数据视为临时表A,并结合sequence查询,确保每个插入对象获得不同的ID。同时提到了在MySQL中,利用自增字段可以避免此类问题。
最低0.47元/天 解锁文章
2万+





