上面介绍的方法同样适用于批量更新数据,如果需要返回多行数据,应该使用scroll()方法,从而可以充分利用服务器端游标所带来的性能优势。下面是进行批量更新的代码片段。

程序清单:codes\06\6.3\batchUpdate\src\lee\UserManager.java

  1. private void updateUsers()throws Exception
  2. {
  3. //打开Session
  4. Session session = HibernateUtil.currentSession();
  5. //开始事务
  6. Transaction tx = session.beginTransaction();
  7. //查询出User表中的所有记录
  8. ScrollableResults users = session.createQuery("from User")
  9. .setCacheMode(CacheMode.IGNORE)
  10. .scroll(ScrollMode.FORWARD_ONLY);
  11. int count=0;
  12. //遍历User表中的全部记录
  13. while ( users.next() )
  14. {
  15. User u = (User) users.get(0);
  16. u.setName("新用户名" + count);
  17. //当count为20的倍数时,
  18. //将更新的结果从Session中flush到数据库。
  19. if ( ++count % 20 == 0 )
  20. {
  21. session.flush();
  22. session.clear();
  23. }
  24. }
  25. tx.commit();
  26. HibernateUtil.closeSession();
  27. }

通过这种方式,虽然可以执行批量更新,但效果非常不好。执行效率不高,需要先执行数据查询,然后再执行数据更新,而且这种更新将是逐行更新,即每更新一行记录,都需要执行一条update语句,性能也非常低下。

为了避免这种情况,Hibernate提供了一种类似于DML语句的批量更新、批量删除的HQL语法。

Hibernate的批量处理-批量更新相关推荐

  1. EF Core中高效批量删除、更新数据的Zack.EFCore.Batch发布三个新特性

    Zack.EFCore.Batch是一个支持在Entity Framework Core中高效删除和更新数据的开源库.我们知道,EF Core中不支持高效的删除和更新数据,所有的更新和操作都是逐条数据 ...

  2. 一招教你数据仓库如何高效批量导入与更新数据

    摘要:GaussDB(DWS)支持的MERGE INTO功能,可以同时进行大数据量的更新与插入.对于数据仓库是一项非常重要的技术. 本文分享自华为云社区<一招教你如何高效批量导入与更新数据> ...

  3. oracle批量将id更新为uuid,oracle批量新增更新数据

    本博客介绍一下Oracle批量新增数据和更新数据的sql写法,业务场景是这样的,往一张关联表里批量新增更新数据,然后,下面介绍一下批量新增和更新的写法: 批量新增数据 对于批量新增数据,介绍两种方法 ...

  4. win7系统补丁服务器,win7怎么批量卸载系统更新补丁KB? win7快速删除系统补丁的技巧...

    当我们电脑打完所有KB补丁之后,由于不兼容而导致了问题不断,又找不出具体是哪个补丁所引起,那么,我们最笨的方法就是删除卸载之前所有安装的系统更新补丁,如果一个一个去手动卸载,难免会导致手指抽筋.win ...

  5. 用PSTools实现软件的远程批量安装或更新

    最近有个项目,以c/s架构开发,客户端需要部署到50多台客户机上.但是软件的维护管理(包括安装.更新等)都由一个人来做,此人也不希望客户端程序自己悄悄更新.所以必须设计一种软件远程批量安装和更新的方案 ...

  6. 批量插入或更新数据(MyBatis-plus框架)

    目录 1.场景说明 2.DUPLICATE 和REPLACE比较 3.批量插入或者更新(两种方式) 方式一:mybatis-plus的saveOrUpdateBatch方法 问题:如果操作类集成了基础 ...

  7. pg批量插入_PostgreSQL实现批量插入、更新与合并操作的方法

    前言 就在 2019 年 1 月份微软收购了 PostgreSQL 数据库的初创公司 CitusData, 在云数据库方面可以增强与 AWS 的竟争.AWS 的 RDS 两大开源数据库就是 MySQL ...

  8. PostgreSQL实现批量插入、更新与合并操作的方法_PostgreSQL_脚本之家

    前言 就在 2019 年 1 月份微软收购了 PostgreSQL 数据库的初创公司 CitusData, 在云数据库方面可以增强与 AWS 的竟争.AWS 的 RDS 两大开源数据库就是 MySQL ...

  9. php 自动生成sql,用PHP批量生成SQL更新语句 网页版

    有时候我们遇到很的SQL需要更新的时候,主意是大批量的时候 如果手动去添加单引号 双引号啥的 效率是非常的慢的! 下面看看批量成成的结果图: 如果是需要手动输入的是不是很慢呢! 代码逻辑思路很简单, ...

  10. MySQL批量插入与更新

    目录 准备表和测试数据 insert into values.insert into select replace into insert into on duplicate key update i ...

最新文章

  1. 《大数据导论》——1.4节案例学习背景
  2. linux gcc 宏定义 __GNUC__ __GNUC_MINOR__ 版本区分
  3. overfitting
  4. boost::gregorian模块实现localization的测试程序
  5. C语言入门题-计算到任意日期的总天数
  6. Android开发之代码开发部分字符串变色
  7. 移动端手指操控左右滑动的菜单
  8. 如何:从Spring 4.0快速入门以构建简单的REST-Like API(演练)
  9. 感恩节活动促销海报模板,摆好借势感恩节的姿势
  10. 框架封装_重大突破,欧菲光成功研发半导体封装用高端引线框架
  11. linux .net环境变量,Linux编程 系统环境变量位置, 环境变量持久化
  12. sql 整改措施 注入_改进的SQL防注入(加强抑错)-ASP教程,安全加密
  13. HTML编辑器-HTML网页表单可视化在线编辑器插件大全
  14. 技术贴:物联网最低功耗解决方案由何种传感器实现的?
  15. RadASM的主题更换!
  16. 模电--反馈电路的综合判断
  17. 滚石特写: 沉默7年后, Magic Leap用魔幻现实主义式科技重新定义了自己
  18. 【方法论】时间管理矩阵(Time Management Matrix )-给事情排序,列好1234再执行吧!
  19. 连接线是计算机硬件吗,音箱线怎么连接电脑?有源音箱和无源音箱连接电脑教程...
  20. 伦巴时间步的动作要领_伦巴前进步动作的基本要领

热门文章

  1. Layui form 表单验证 基本属性
  2. c语言 取随机字符串,C语言之获取32字节随机数的字符串
  3. python自动化测试框架开发_webUI自动化测试框架(Python+selenium)
  4. redis 计数器 java_Redis介绍
  5. unity头顶状态制作_Unity中结合IK实现Lookat
  6. 阻塞io阻塞io_面试官:直接IO、缓存IO、阻塞与同步?
  7. C#程序打包与部署,包括处理安装向导中用户输入的参数,创建卸载程序。
  8. C#判断检测网络是否连接
  9. 机器学习理论与实战:逻辑回归
  10. php query builder,php – Symfony2 – Doctrine2 QueryBuilder WHERE I...