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值的一個關鍵詞,我們在語句上,正確的賦值這個詞,就能夠正確執行了。

有什麼問題的話,可以留言交流,如果解決了您的問題的話,也希望能夠點贊分享,希望能夠幫助到您!!

 

 

 

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