2019独角兽企业重金招聘Python工程师标准>>>

Mybatis的批量更新 bug 博客分类: mybatis 异常

Mybatis的批量更新

      Mybatis的批量插入这里有http://ljhzzyx.blog.163.com/blog/static/38380312201353536375/。目前想批量更新,如果update的值是相同的话,很简单,组织

update table set column='...' where id in (1,2,3)l
这样的sql就可以了。 Mybatis中这样写就行
<update id="batchUpdateStudentWithMap" parameterType="java.util.Map" >
UPDATE STUDENT SET name = #{name} WHERE id IN
<foreach collection="idList" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</update>

但是这样的需求很少,一般是有个集合,每个元素中的值是不一样的,然后需要一次性更新。一般的处理方式是使用for循环。这样的效率较低,当数据量大时,期望有种一次性插入的操作。如果使用的是mysql,有
insert into table (aa,bb,cc) values(xx,xx,xx),(oo,oo,oo) on duplicate key update
replace into table (aa,bb,cc) values(xxx,xxx,xxx),(ooo,ooo,ooo),(ccc,ccc,ccc) 
两种方式可以处理。
      当前数据库是oracle,可以使用case when来拼成一长串sql处理
UPDATE mytable
    SET myfield = CASE id
        WHEN 1 THEN 'value'
        WHEN 2 THEN 'value'
        WHEN 3 THEN 'value'
    END
WHERE id IN (1,2,3)

实际上这种方式对于mysql也有效。
      最开始的时候,想着写一系列并列的更新语句就可以了
<update id="updateBatch" parameterType="java.util.List">
<foreach collection="list" item="item" index="index" separator=";"
open="" close="">
update REGION_CODE set
CODE=#{item.Code,jdbcType=VARCHAR},
NAME=#{item.Name,jdbcType=VARCHAR}
where ID = #{item.id,jdbcType=DECIMAL}
</foreach>
</update>
这样直接报错,因为 Mybatis映射文件中的sql语句不允许   ; 符号。按照可行的case when处理方式, Mybatis映射文件书写方式如下:
<update id="updateBatch" parameterType="java.util.List">
  update REGION_CODE set
    CODE=
  <foreach collection="list" item="item" index="index" separator=" " open="case ID" close="end">
      when #{item.id,jdbcType=DECIMAL} then #{item.Code,jdbcType=VARCHAR}
  </foreach>
  ,NAME=
  <foreach collection="list" item="item" index="index" separator=" " open="case ID" close="end">
      when #{item.id,jdbcType=DECIMAL} then #{item.Name,jdbcType=VARCHAR}
  </foreach>
  where ID in
  <foreach collection="list" index="index" item="item" separator="," open="(" close=")">
      #{item.id,jdbcType=DECIMAL}
  </foreach>
</update>

      至此,批量更新功能完成。
 总结:批量更新的时候,用;号结束不行。
http://ljhzzyx.blog.163.com/blog/static/38380312201482434852742/

转载于:https://my.oschina.net/xiaominmin/blog/1597118

Mybatis的批量更新 bug相关推荐

  1. Mybatis之批量更新操作

    2019独角兽企业重金招聘Python工程师标准>>> Mybatis之批量更新操作 更新单条记录 1 UPDATE course SET name = 'course1' WHER ...

  2. SpringBoot+Mybatis+Druid批量更新 multi-statement not allow异常

    SpringBoot+Mybatis+Druid批量更新 multi-statement not allow异常 参考文章: (1)SpringBoot+Mybatis+Druid批量更新 multi ...

  3. Mybatis之批量更新数据(批量update)

    前言 当我们使用mybatis的时候,可能经常会碰到一批数据的批量更新问题,因为如果一条数据一更新,那每一条数据就需要涉及到一次数据库的操作,包括网络IO以及磁盘IO,可想而知,这个效率是非常低下的. ...

  4. mybatis mysql 批量更新_mysql批量update更新,mybatis中批量更新操作

    在日常开发中,有时候会遇到批量更新操作,这时候最普通的写法就是循环遍历,然后一条一条地进行update操作.但是不管是在服务端进行遍历,还是在sql代码中进行遍历,都很耗费资源,而且性能比较差,容易造 ...

  5. 扩展tk.mybatis的批量更新的功能

    tk.mybatis没有带批量更新的功能,批量更新却是经常使用的,所以需要自己实现. 批量更新网上主要有2种方式:case when方式.foreach方式 但是foreachzhe这种方式效率非常低 ...

  6. mybatis中批量更新

    一.更新多条数据,每条数据都不一样 背景描述:通常如果需要一次更新多条数据有两个方式,(1)在业务代码中循环遍历逐条更新.(2)一次性更新所有数据(更准确的说是一条sql语句来更新所有数据,逐条更新的 ...

  7. mybatis实现批量更新

    <!-- 批量修改 --><update id="batchUpdate" parameterType="list">update Sk ...

  8. mybatis plus 批量更新数据_Mybatis 多字段组合唯一 并批量添加不重复数据

    前言 现在,普遍的关系型数据库开发都离不开 mybatis 这个优秀的持久层框架.而在普遍的业务场景中,也时常会有短时间内高频次的增删操作.这样短时间内高频次的操作,通常有两种实现方案,第一种是比较常 ...

  9. mybatis执行批量更新batch update 的方法(oracle,mysql)

    oracle和mysql数据库的批量update在mybatis中配置不太一样: oracle数据库: <updateid="batchUpdate" parameterTy ...

最新文章

  1. 力扣(LeetCode)刷题,简单题+中等题(第20期)
  2. Hyperledger Grid:一个用于分布式供应链解决方案的框架
  3. LocalResizeIMG前端HTML5本地压缩图片上传,兼容移动设备IOS,android
  4. HDU 3282 Running Median 动态中位数,可惜数据范围太小
  5. docker创建rabbitmq容器命令
  6. 5.1.2全景声音箱摆位_如何体验全景声
  7. Flutter、ReactNative、uniapp对比
  8. MobSF,一款开源移动安全测试框架
  9. 在Linux中查看正在运行哪些process,杀掉一批名字相同的process
  10. springboot2 - 坑 - 解决put提交接收不到参数的问题
  11. java panel画椭圆_如何在Java 2D中绘制椭圆?
  12. iis中间件_.NET Core技术研究中间件的由来和使用
  13. Material Design使用集合
  14. MediaDevices.getUserMedia()
  15. 含泪推荐四款超级好用的电脑软件,值得收藏
  16. 努力不是为了追赶别人,只是为了超越自己
  17. ASP.NET Core 自定义中间件
  18. 【数字IC设计/FPGA】推挽输出和开漏输出
  19. Windows修改本地域名解析文件hosts
  20. keygen是怎么写出来的。

热门文章

  1. python交易_Python实现银行账户资金交易管理系统
  2. v-if 的区别v-show
  3. php,js端获取sessionid的方法
  4. html5渲染,HTML的渲染过程
  5. 内存管理单元MMU简介
  6. 关于Go程序错误处理的一些建议
  7. JUC:ConcurrentHashMap(并发容器)
  8. 问题:org.apache.dubbo.remoting.TimeoutException
  9. Windows系统中常见的进程DOS操作命令
  10. 安装electron-react-boilerplate遇到的问题