實際上,我們經常會遇到這樣的需求,那就是利用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>
總結
有些時候,遍尋代碼而無錯也找不到問題的時候,不妨去找找系統環境的問題,說不定,就只在一瞬,問題迎刃而解。
感謝各位看官。
————————————————
版權聲明:本文為CSDN博主「henry-hacker」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/wangmeng951011/article/details/67640027