文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MyBatis批量更新(updateBatch)

2023-08-17 15:22

关注

通常有两种解决方法:

1) 在业务代码中循环遍历逐条更新。

2) 一次性更新所有数据(更准确的说是一条sql语句来更新所有数据,逐条更新的操作放到数据库端,在业务代码端展现的就是一次性更新所有数据)。

逐条更新(java实现)

updateBatch(List datas){    for(MyData data : datas){        try{            myDataDao.update(data);//更新一条数据,mybatis中如下面的xml文件的update        }        catch(Exception e){            ...//如果更新失败可以做一些其他的操作,比如说打印出错日志等        }    }}//mybatis中update操作的实现    update mydata    set   ...    where ...

这种方式最大的问题就是效率问题,逐条更新,每次都会连接数据库,然后更新,再释放连接资源(虽然通过连接池可以将频繁连接数据的效率大大提高,抗不住数据量大),这中损耗在数据量较大的时候便会体现出效率问题。这也是在满足业务需求的时候,通常会使用上述提到的第二种批量更新的实现

逐条更新(mybatis实现)

通过(foreach标签实现)

要实现批量更新,首先得设置mysql支持批量操作,在jdbc链接中需要附加&allowMultiQueries=true属性才行

jdbc:mysql://localhost:3306/dbname?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
              update course                    name=${item.name}                where id = ${item.id}          

foreach 元素的属性主要有 item,index,open,separator,close,collection。

属性描述
collection表示迭代集合的名称,可以使用@Param注解指定, 该参数为必选
item表示本次迭代获取的元素,若collection为List、Set或者数组,则表示其中的元素;若collection为map,则代表key-value的value,该参数为必选
open表示该语句以什么开始,最常用的是左括弧’(’,注意:mybatis会将该字符拼接到整体的sql语句之前,并且只拼接一次,该参数为可选项
close表示该语句以什么结束,最常用的是右括弧’)’,注意:mybatis会将该字符拼接到整体的sql语句之后,该参数为可选项
separatormybatis会在每次迭代后给sql语句append上separator属性指定的字符,该参数为可选项
index在list、Set和数组中,index表示当前迭代的位置,在map中,index代指是元素的key,该参数是可选项。

sql批量更新

原始sql 批量更新语句

update mydata_table     set status =     case        when id = #{item.id} then #{item.status}//此处应该是展开值        ...    end    where id in (...);

整体mybatis 批量更新脚本

    update mydata_table                                                               when id=#{item.id} then #{item.status}                                                       when id=#{item.id} then mydata_table.status//原数据                                              where id in            #{item.id,jdbcType=BIGINT}    

参考链接
https://www.cnblogs.com/eternityz/p/12284760.html

来源地址:https://blog.csdn.net/qq_44073614/article/details/130238179

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯