mybatis中,通过foreach标签向oracle和mysql数据库中批量插入数据

想来也是好搞笑,,自己以前一直用的都是mysql和postgre数据库,很久没用oracle数据库了,最近项目有个定时任务,批量更新插入数据,然后我自己写还是通过mysql的方式,也就是下面的第一种写法往oracle数据库里面批量插入数据,测试的时候控制台一直在报错,

    ### Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束

另一种还是什么非法的字符什么的,反正就是各种错误,弄得我都有些怀疑人生了,我记得以前明明就是这么写,怎么现在就报错了,,哇,足足坑了我一个下午+一个晚上,当时自己去网上找解决方案,其实也看到oracle也就下面的oracle数据库插入方式,但是自己印象中用过的没有这个链接union all什么的,于是就一直没有尝试这种方式,一直还是按照这mysql的改来改去,最后是在是找不出来原因了,,,就尝试了下oracle的方式,结果居然就插入成功了,,,哇我真的是心态崩了。。。。。一瞬间怀疑人生啊.........

中间还有一个小插曲,,因为项目中用的是mybatis-plus这个框架,,我原先还以为是这个框架不支持oracle批量插入,后面自写了个小demo项目用mybatis框架自己测试了一下,结果还是一样错误,,,知道后面改成了oracle方式才插入成功。。我真的是醉了.....

Oracle数据库

<insert id="insertList">

  insert into tableName(column1 , column2 , column3)

  select t.* from(

    <foreach collection="list" item="obj" index="index" sperator="union all" useGeneratedKeys="false">

    (

      select 

        #{obj.field} column1 ,

        #{obj.field} column2,

        #{obj.field} column3

      from dual

    )

    </foreach>

  )t 

</insert>

mysql

第一种:

<insert id="insertByForeachTag" parameterType="java.util.List">
    INSERT INTO Products(prod_id,vend_id,prod_name,prod_desc,prod_price)
      VALUES
    <foreach collection="prods" item="prod" separator=",">
        (#{prod.prodId},#{prod.vendId},#{prod.prodName},#{prod.prodDesc},#{prod.prodPrice})
    </foreach>
</insert>

第二种

<insert id="insertByForeachTag" parameterType="java.util.List">
    <foreach collection="prods" item="prod" separator=";">
    INSERT INTO
        Products(prod_id,vend_id,prod_name,prod_desc,prod_price)
    VALUES
        (#{prod.prodId},#{prod.vendId},#{prod.prodName},#{prod.prodDesc},#{prod.prodPrice})
    </foreach>
</insert>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章