mysql allowmultiqueries=true_Mysql批量更新的一个坑-&allowMultiQueries=true容许批量更新_mysql...

原文来源:http://blog.csdn.net/wangmeng951011/article/details/67640027

前言

实际上,我们经常会遇到这样的需求,那就是利用Mybatis批量更新或者批量插入,但是,实际上即使Mybatis完美支持你的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>

1

<updateid="updateAllAvailable"><foreachcollection="skuOptionList"item="item"index="index"open=""close=""separator=";">updatet_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>

1

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

总结

有些时候,遍寻代码而无错也找不到问题的时候,不妨去找找系统环境的问题,说不定,就只在一瞬,问题迎刃而解。

感谢各位看官。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值