前言
        实际上,我们经常会遇到这样的需求,那就是利用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>

mybatis批量操作出现BadSqlGrammarException

用过mybatis的猿友也许使用过它的批量操作(可以参考菜鸟程序猿之mybatis的批量操作),但是其实这个地方有个比较坑爹的问题,如下:

这里为我的映射文件对应的sql

<update id="testBatchUpd" parameterType="java.util.Map">
<foreach collection="dmsProdSkuStocks" item="item" separator=";">
UPDATE dms_prod_sku_stock SET
STOCK = #{item.stock}
WHERE SKU_RELATE_ID = #{item.skuRelateId}
</foreach>
</update>
仔细观察,也没发现有什么问题,但是去调用接口执行的时候,程序总是会报出一个错误

org.springframework.jdbc.BadSqlGrammarException:
将其输出的sql放到sqlyog里面执行,也可以成功执行,很难定位问题所在何处。

原来用mybatic 批量操作必须加上参数&allowMultiQueries=true

这参数意思是允许多个查询。

这样就可以放心得使用mybatis的批量操作了!

转载于:https://www.cnblogs.com/Im-Victor/p/11075708.html

Mysql批量更新的一个坑-allowMultiQueries=true允许批量更新相关推荐

  1. mysql allowmultiqueries=true_Mysql批量更新的一个坑-allowMultiQueries=true允许批量更新(转)...

    实际上,我们经常会遇到这样的需求,那就是利用Mybatis批量更新或者批量插入,但是,实际上即使Mybatis完美支持你的sql,你也得看看你说操作的数据库是否支持,而阿福,最近就遇到这样的一个坑. ...

  2. Django修改mysql连接密码的一个坑

    写在最前面: 出于安全的考虑,想修改一下部署在阿里云的数据库密码,结果改了之后,网站还是正常显示? 其实 我改的root@localhost是本地连接数据库的密码,而第一个%才是除了本地以外的连接用户 ...

  3. oracle一个表更新另一个表多列,oracle sql更新表中多列值,值是从其它表中查询(select)得出...

    案例描述:sql 将表vehicle中列pay_money_remain的值分为2/3,1/3再更新到表vehicle的pay_money_remain,disinfectionbal_remains ...

  4. unity案例 mysql lua_通过Xlua实现unity热更新的一个小例子

    通过Xlua实现unity热更新的一个小例子 一.介绍 ​ 热更新是指在更新游戏资源或者逻辑的时候不需要开发者将游戏再打包.发布.玩家重新下载安装包,而是可以通过将需要更新的资源打包成AssetBun ...

  5. C# 实现 rtc_通过Xlua实现unity热更新的一个小例子

    通过Xlua实现unity热更新的一个小例子 一.介绍 ​ 热更新是指在更新游戏资源或者逻辑的时候不需要开发者将游戏再打包.发布.玩家重新下载安装包,而是可以通过将需要更新的资源打包成AssetBun ...

  6. mysql更新多条数据6_mysql语句:批量更新多条记录的不同值

    mysql更新语句很简单,更新一条数据的某个字段,一般这样写: 如果更新同一字段为同一个值,mysql也很简单,修改下where即可: 这里注意 'other_values' 是一个逗号(,)分隔的字 ...

  7. mysql div 没有小数,mysql order by limit 的一个坑

    mysql order by limit 的一个坑 分页查询的时候遇到的坑: 发现的问题: 对单个无索引的字段进行排序后limit .发现当被排序字段有相同值时并且在limit范围内,取的值并不是正常 ...

  8. mySQL:两表更新(用一个表更新另一个表)的SQL语句

    用一个表中的字段去更新另外一个表中的字段, MySQL 中有相应的 update 语句来支持,不过这个 update 语法有些特殊.看一个例子就明白了. create table student (s ...

  9. python封装一个效率极高的 批量更新、插入合一的工具

    我在写爬虫的时候,经常会获取大量的数据.这个时候大量数据的数据库操作如果不做一定的优化的话,将会耗费大量的时间.通过实践我发现,批量的数据操作将会极大的提高数据库操作的效率.同时,很多时候存在数据如果 ...

最新文章

  1. PCL1.8.0+VS2013+Win10 x64的配置教程
  2. 用flex进行网易云音乐界面构建和布局解析(2)
  3. 治标更治本,如何从根源防护DDoS***
  4. java 耦合度_Java第三十八天,Spring框架系列,使用工厂模式降低程序耦合度
  5. python 勒索病毒 源码_python生成的exe被360识别为勒索病毒原因及解决方法
  6. Python使用标准库subprocess调用外部程序
  7. kali升级软件_KALI更新软件源地址
  8. vtd xml java_新兴XML处理方法VTD-XML介绍
  9. 苹果软解ID软件(X.PASSWORD-XIMEI 苹果id锁)--上帝左手汉化组(内附即时更新)
  10. layer弹窗内容显示不全的解决方法
  11. 如何编写makefile文件
  12. libreelec投屏_【树莓派】树莓派与XBMC及Kodi、LibreELEC插件(一)
  13. php洗车分销系统_全国首个PHP宝塔IDC分销系统
  14. 中国第一,全球领先的「浪潮」:用智慧计算征服的计算力天下
  15. MPC-HC视频播放器
  16. ISA-95/B2MML教程 : 从用例到XML消息的整合实践
  17. 6个Vlookup查找函数用法,总有你想用的!
  18. php依赖注入框架pimple中文文档
  19. t00lsudf.php,udf提权
  20. 游戏计算机的显示器,玩游戏用多大显示器好?聊聊电脑显示器多大尺寸合适

热门文章

  1. (idea)设置鼠标移到类、方法、变量上时,显示相关提示信息
  2. dev shm php,/dev/shm 介绍 --转载
  3. 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
  4. Apriori进行关联分析
  5. 算法复习——迭代加深搜索(骑士精神bzoj1085)
  6. [JavaWeb基础] 015.Struts2 表单验证框架
  7. vim上下左右键输出A B
  8. DataGrid的多行提交
  9. jQuey/js 省市县三级下拉框联动的回显(简单易懂)
  10. 十分钟学习python_10分钟带你入门Cython