ORACLE+mybatis+foreach进行批量插入数据的填坑

在进行批量数据操作的时候,

mysql的批量操作与oracle的操作不同,如果直接使用mysql的操作方式,放在oracle操作中,执行的时候,会一致报SQL未正确结束的错误,所有我们要进行分开,进行针对性操作。

关于mysql的操作:

<insert id="batchInsert" parameterType="list">
    insert into S_DATUM_PAGE(PAGE_ID,ENTRY_ID,DATUM_ID,CONTENT_LENGTH,
    CREATED_TIME,NAME_TIME,IMAGE_FORMAT,PAGE_ORDER,PATH)
    VALUES
    <foreach collection="list" item="item" separator=";">
      (#{item.pageId},#{item.entryId},#{item.datumId},#{item.contentLength},
       #{item.createdTime},
      #{item.nameTime},#{item.imageFormat},#{item.pageOrder},#{item.path})
    </foreach>
</insert>

其中mysql的操作就比较简单,可以进行直接的一对一赋值操作即可,这样就不影响绑定数据的问题

关于oracle的操作:

<insert id="batchInsert" parameterType="list" useGeneratedKeys="false" >
    insert into S_DATUM_PAGE
    (PAGE_ID,ENTRY_ID,DATUM_ID,CONTENT_LENGTH,CREATED_TIME,NAME_TIME,
    IMAGE_FORMAT,PAGE_ORDER,PATH)
      <foreach collection="list" item="item" separator="union all">
        (SELECT
        #{item.entryId},#{item.datumId},#{item.contentLength},#{item.createdTime},
        #{item.nameTime},#{item.imageFormat},#{item.pageOrder},#{item.path}
        FROM dual)
      </foreach>
 </insert>

oracle的操作,就比较麻烦一点,需要在数据绑定的部分,借助dual模拟表,进行数据的整理工作,这样的话,才能够正确的进行数据的批量插入工作。

另外值得注意的一点:

就是在oracle操作的时候,一定要注意mybatis的语句中:useGeneratedKeys="false",这个关键词,如果没有这个关键词,仍旧会继续报SQL未正确结束的操作,这个是关闭自动生成key值的一个关键词,我们在语句上,正确的赋值这个词,就能够正确执行了。

有什么问题的话,可以留言交流,如果解决了您的问题的话,也希望能够点赞分享,希望能够帮助到您!!

 

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值