1. 程式人生 > 其它 >Mysql批量更新的一個坑-&allowMultiQueries=true允許批量更新

Mysql批量更新的一個坑-&allowMultiQueries=true允許批量更新

前言
實際上,我們經常會遇到這樣的需求,那就是利用Mybatis批量更新或者批量插入,但是,實際上即使Mybatis完美支援你的sql,你也得看看你說操作的資料庫是否支援,而阿福,最近就遇到這樣的一個坑。

問題
先帶大家來看一段sql的配置,

<update id="updateAllAvailable">
<foreach collection="skuOptionList" item="item" index="index" open="" close="" separator=";">
  update t_xxx
  <set>
    old_id = #{item.oldId}
  </set>
  where id = #{item.id}
</foreach>
</update>

  



看似似乎沒有一點問題,這裡用到了Mybatis的動態sql,實際上說白了也就是拼sql,不過這個繁雜的工作交給Mybatis幫我們去做了。可是,只要一執行就要報語法錯誤。除錯了好久,發現只要傳一個值進去就沒有問題,就是list的成員只有一個。這引起了我的警覺。

解決方案

後來發現,原來mysql的批量更新是要我們主動去設定的, 就是在資料庫的連線url上設定一下,加上* &allowMultiQueries=true *即可。

擴充套件

實際的業務系統裡面oracle資料庫也用的非常的多,當然,oracle資料庫不需要做特殊的配置,但是相應的sql要做變化。

<update id="updateAllAvailable">
    <foreach collection="skuOptionList" item="item" index="index" open="begin" close="end;" separator=";">
      update t_xxx
      <set>
        old_id = #{item.oldId}
      </set>
      where id = #{item.id}
    </foreach>
  </update>