Mybatis對Oracle批量插入的配置____Oracle

來源:互聯網
上載者:User

項目裡使用了MyBatis做持久層,資料庫是Oracle,用到了Batch Insert 功能,因為以前做的都是MySQL,也做過PostgreSQL資料庫,批量插入的語句都相同,但是在Oracle上就不好使了。後來網上搜了下,大致的寫法有兩種:

  <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="false">    insert into USER_CARE_SITE (USER_ID, CARE_SITE_ID)    <foreach collection="list" item="item" index="index" separator="union all" >   (select #{item.userId,jdbcType=INTEGER}, #{item.careSiteId,jdbcType=INTEGER} from dual)    </foreach>  </insert>

<insert id="batchInsert" parameterType="java.util.List">     INSERT ALL    <foreach collection="list" item="item">   INTO USER_CARE_SITE (USER_ID, CARE_SITE_ID)      VALUES ( #{item.userId,jdbcType=INTEGER}, #{item.careSiteId,jdbcType=INTEGER} )    </foreach>    SELECT * FROM DUAL  </insert>

但是我這邊的控制台始終報ORA-00933: SQL 命令未正確結束,然後我就把語句直接拷貝到sqldeveloper裡面執行,都能工作。然後比對自己的代碼和網友的代碼,幾乎是一模一樣的啊,但是MyBatis 始終通不過,所以我就在猜這個可能是MyBatis裡面的錯誤。

然後就google到了網友 mybatis批量插入資料到oracle ,裡面提到了 “原因竟是mybatis批量插入oracle時需要顯式指定為 useGeneratedKeys="false" 不然報錯~~~”。測試下,果然可以,但是其他網友的能不設這個屬性都可以工作,是因為他們在 MyBatis 的設定檔裡面(我的是mybatis-config.xml )要麼沒設這個屬性值,因為預設值就是false, 要麼就是將這個值設定為 false 了,而我的偏偏就將其設定為 true,悲哀。。。。

<!-- 允許 JDBC 支援產生的鍵。 需要適合的 驅動。 如果設定為 true 則這個設定強制 產生的鍵被使用, 儘管一些驅動拒絕兼 容但仍然有效(比如 Derby), 預設false -->          <setting name="useGeneratedKeys" value="false" />

不知道這個屬性設定為 false 後,哪些功能會受到影響,這個我還沒碰到。這次寫出來就是為了方便大家在檢索問題的時候多一個答案來源。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.