当前位置: 首页 > news >正文

东莞网站建设 光龙wordpress 目录 模板下载

东莞网站建设 光龙,wordpress 目录 模板下载,网站备案,网站建设合同注意事项工作中遇到批量更新的场景其实是比较常见的。 但是该如何正确的进行批量UPDATE,很多时候往往有点头大。 这里列2种可用的方式,供选择(请选择方式一,手动狗头。)。 如果使用了MyBatis增强组件MyBatisPlus 如果使用了MyBatisPlus,…

工作中遇到批量更新的场景其实是比较常见的。
但是该如何正确的进行批量UPDATE,很多时候往往有点头大。
这里列2种可用的方式,供选择(请选择方式一,手动狗头。)。

如果使用了MyBatis增强组件MyBatisPlus

如果使用了MyBatisPlus,可以参考官网给出的解决方式(updateBatchById),或者自己查一下。


批量UPDATE方式一:SQL内foreach

举个??

<update id="updateUserForBatch" parameterType="com.bees.srx.entity.UserEntity"><foreach collection="list" item="entity" separator=";">UPDATE sys_userSET password=#{entity.password},age=#{entity.age}<where>id = #{entity.id}</where></foreach>
</update>

这样写,肯定比 在业务方法中for循环单条update的效率是要高的。
但是如果遇到大批量的更新动作,可能也会产生效率低下的问题。
原因是SQL内的foreach本质上还是循环插入每一条数据,会产生 list.size() 个单条插入的独立SQL语句,每一条 UPDATE 语句都会被单独发送到数据库服务器执行。
这意味着如果列表中有100个元素,就会产生100次数据库往返通信。
这种方式不仅效率低下,而且对于大型批处理操作来说,可能会导致性能瓶颈和资源浪费。

优化:通过JDBC批处理
通过 MyBatisSqlSession 提供的批处理功能来手动执行批量更新。

try (SqlSession session = sqlSessionFactory.openSession(ExecutorType.BATCH)) {UserMapper mapper = session.getMapper(UserMapper.class);for (UserEntity user : userList) {mapper.updateUser(user);}session.commit();
}

这里mapper.updateUser就是单条的UPDATE语句。

通过这种方式,MyBatis 会在内存中积累所有的更新命令,然后在调用session.commit() 时一次性提交给数据库,这比逐条执行要高效得多。

注意:是否存在效率差异,未实践过!!!可能存在误人子弟的嫌疑。

批量UPDATE方式二:INSERT + ON DUPLICATE KEY UPDATE
 <update id="updateForBatch" parameterType="com.bees.srx.entity.UserEntity">insert into sys_user(id,username,password) values<foreach collection="list" index="index" item="item" separator=",">(#{item.id},#{item.username},#{item.password})</foreach>ON DUPLICATE KEY UPDATEpassword=values(password)
</update>

不建议使用。要求较多,而且容易出现死锁。

注意事项

  • 唯一键约束:确保 sys_user 表中的 id 字段有唯一键约束(通常是主键)。如果 id 不是唯一的,ON DUPLICATE KEY UPDATE 将不会触发更新操作。
  • 性能:这种方式在大数据量的情况下比多次单独的 INSERT 和 UPDATE 操作要高效得多。
  • 事务管理:确保这个操作在一个事务中执行,以保证数据的一致性。如果中间发生错误,可以回滚整个操作。
  • 字段顺序:确保 VALUES 函数中的字段顺序与 ON DUPLICATE KEY UPDATE 子句中的字段顺序一致。
总结:

建议使用方式一,或者其优化方式(JDBC批处理)。
各位也可以与AI对话看看给出的建议是什么。


有问题一定要留言啊各位。及时发现及时改错。

http://www.dtcms.com/a/582046.html

相关文章:

  • 时序数据库系列(六):物联网监控系统实战
  • 迁移学习基础知识——迁移学习的问题形式化
  • java基础-ArrayList集合
  • 做网站运营优质做网站价格
  • 【双机位A卷】华为OD笔试之【哈希表】双机位A-采购订单【Py/Java/C++/C/JS/Go六种语言】【欧弟算法】全网注释最详细分类最全的华子OD真题题解
  • 第十章、GPT1:Improving Language Understanding by Generative Pre-Training(代码部分)
  • 2025全球生成式人工智能AIGC产业全景与行业应用研究报告|附900+份报告PDF、数据、可视化模板汇总下载
  • 网站广告销售怎们做网站开发确认书
  • 常见的模型性能评估图表案例解读
  • 网站推广服务网站连锁金融网站怎么做
  • 从协议中成长
  • ⚡️2025-11-07GitHub日榜Top5|AI舆情分析系统
  • 云建站淘宝客网页设计教程 表单
  • 石河子农八师建设兵团社保网站餐饮营销方案
  • P1012 [NOIP 1998 提高组] 拼数
  • 第四阶段C#通讯开发-9:网络协议Modbus下的TCP与UDP
  • 《计算机操作系统》_并发 bug 和应对 (死锁/数据竞争/原子性违反;防御性编程和动态分析)20251106
  • 【算法】递归的艺术:从本质思想到递归树,深入剖析算法的性能权衡
  • 网上怎么做网站赚钱seo初级入门教程
  • MySQL GROUP BY 和 GROUP_CONCAT 使用方法总结,group by后将其他的字段整合到一个字段中 并通过逗号链接或指定其他链接符号
  • 数字人|数字人企业技术派选择
  • 简单实现文字两端对齐
  • Flink Rebalance触发乱序的问题
  • 联合建设官方网站公司邮箱怎么在手机上登录
  • 代理龙华网站建设深圳英迈思做网站好么
  • UE网络复制中的可靠函数是什么意思 什么时候要勾选什么时候不勾?
  • 沈阳做网站建设微信公众号小程序开发教程
  • slice在Python和Go中的异同
  • 科技公司网站设计公司天津定制开发网站
  • 3 个近期 yyds 的 AI 开源项目, 有点绝。