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>

 

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