Hibernate批量处理数据

概念:

批量处理数据是指在一个事务场景中处理大量数据。

在应用程序中难以避免进行批量操作,Hibernate提供了以下方式进行批量处理数据:

(1)使用HQL进行批量操作  数据库层面  executeUpdate()

(2)使用JDBC API进行批量操作  数据库层面

(3)使用Session进行批量操作   会进缓存

1.使用HQL进行批量操作

      HQL可以查询数据,也可以批量插入、更新和删除数据。HQL批量操作实际上直接在数据库中完成,处理的数据不需要加载到Session缓存中。使用Query接口的executeUpdate()方法执行用于插入、更新和删除的HQL语句。

01.批量插入数据

    @Test//03.HQL 批量添加public void multiInsertTest(){String hql="insert into Dept(deptName) select d.deptName||d.deptNo from Dept d where d.deptNo>0";session.createQuery(hql).executeUpdate();}

02.批量修改

 @Test//03.HQL 批量修改public void multiUpdateTest(){String hql="update Dept set deptName=:name where deptNo>2";session.createQuery(hql).setParameter("name","财务部").executeUpdate();}

03.批量删除

复制代码

 @Test//03.HQL 批量删除public void multiDeleteTest(){String hql="delete from Dept d where d.deptNo>:deptNo";session.createQuery(hql).setParameter("deptNo",20).executeUpdate();}

2.使用JDBC API进行批量操作

 @Test//04.JDBC API 批量修改public void insertTest(){Work work=new Work() {public void execute(Connection connection) throws SQLException {PreparedStatement ps = connection.prepareStatement("update DEPT  set deptName='业务部'where DEPTNO>?");ps.setInt(1,1);ps.executeUpdate();}};//sessionsession.doWork(work);}

操作前:                                 操作后:

注意:该方式使用的连接依然是最初的连接对象,并且命令对象依然是根据连接创建的,注意这里是SQL语句,不是HQL语句

3.使用Session进行批量操作

    使用Session对象也可以进行批量操作。使用Session对象处理大量持久化对象,需及时从缓存中清空已经处理完毕并且不会再访问的对象。可以在处理完成一个对象或小批量对象后,调用flush()方法强制同步缓存和数据库,然后调用clear()方法清空缓存。

 @Testpublic void testAdd(){Emp emp=null;for (int i = 0; i < 10000; i++) {emp=new Emp(i, "emp"+i);session.save(emp);if (i%30==0) {session.flush();session.clear();}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/164674.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue学习笔记-Object.defineproperty函数

文章目录 前文提要Object.defineProperty作用Object.defineProperty参数使用例图getter&#xff0c;也就是get函数setter&#xff0c;也就是set函数 前文提要 本人仅做个人学习记录&#xff0c;如有错误&#xff0c;请多包涵 Object.defineProperty作用 当在js中声明了一个变…

王道p150 20.将给定的表达式树转化为等价的中缀表达式(通过括号反应操作符的计算次序)

本题代码如下 void btreetoexp(tree t, char deep) {if (t NULL)return;else if (t->lchild NULL && t->rchild NULL)printf("%c", t->data);//输出操作数&#xff0c;不加括号else {if (deep > 1)printf("(");btreetoexp(t->l…

Rust语言入门教程(二) - 变量与作用域

变量与作用域 变量的声明与初始化 Rust的基本语法格式如下&#xff1a; fn main(){let bunnies 2; }语句以分号结尾&#xff0c;用花括号包含语句块。 Rust的语法其实借鉴了很多其他的语言&#xff0c;比如C语言和Python&#xff0c; 所以变量定义的格式看起来也跟很多我们…

shell 脚本的函数和数组

函数 —— 封装的一个公式&#xff1a;sin、cos、tan —— 函数为脚本的别名 —— 函数就是一个功能模块&#xff0c;在函数中写执行的命令即可&#xff1b;使用函数可以避免代码重复&#xff0c;增加可读性&#xff0c;简化脚本&#xff0c;使用函数可以将大的工程分割为若…

Vue中动态class方法

1.方法一&#xff1a;只需要展示一个class样式&#xff0c;但是动态取值 <div :class"aaa"></div>data:{return () {aaa:colorRed} }.colorRed {color: red; } 2.方法二&#xff1a;表达式判断是否展示class里面的样式 <div :class"{colorRed…

函数与数组

一.函数 1、函数的作用 定义较为复杂的但是需要重复使用的内容&#xff0c;以便再次使用&#xff0c;可以直接调用&#xff0c;节约时间&#xff0c;提高效率。 语句块定义成函数约等于别名&#xff0c;定义函数&#xff0c;再引用函数。 封装的可重复利用的具有特定功能的…

python+django高校科研项目管理系统2u3mx

高校科研项目管理系统采用拟开发的高校科研项目管理系统通过测试,确保在最大负载的情况下稳定运转,各个模块工作正常,具有较高的可用性。系统整体界面简洁美观,用户使用简单,满足用户需要。在因特网发展迅猛的当今社会,高校科研项目管理系统必然会成为在数字信息化建设的一个重…

Linux 查看 CPU 信息相关命令

目录 lscpu top htop lscpu lscpu 命令是用于显示有关 CPU 架构的信息&#xff0c;而不是用于实时监视 CPU 负载。它提供有关 CPU 类型、核心数、线程数、架构等的详细信息。 lscpu top 命令会显示系统的实时状态&#xff0c;包括 CPU 使用率、内存使用率等。按下键盘上的…

一文详解Vue生命周期

Vue是一种流行的用于构建用户界面的渐进式JavaScript框架。Vue框架在开发过程中&#xff0c;特别强调对生命周期的理解和管理。通过使用生命周期钩子函数&#xff0c;开发者能够精确地控制Vue实例的创建、挂载、更新以及销毁过程。本文将对Vue的生命周期进行详细的介绍&#xf…

YOLOv8训练自己的目标检测数据集

YOLOv8训练自己的目标检测数据集 目录标题 源码下载环境配置安装包训练自己的数据集数据集文件格式数据集文件配置超参数文件配置训练数据集命令行训练脚本.py文件训练 进行detect显示detect的效果 源码下载 YOLOv8官方的GitHub代码&#xff0c;同时上面也有基础环境的配置要…

IntelliJ IDEA 16创建Web项目

首先要理解一个概念&#xff1a;在IntelliJ IDEA中“new Project”相当于eclipse中的工作空间&#xff08;Workspace&#xff09;&#xff0c;而“new Module”相当于eclipse中的工程&#xff08;Project&#xff09;。以下均采用Intellij的说法&#xff0c;请自行对照转换理解…

Maven仓库清除remote.repositories、lastUpdated、sha1脚本

Maven仓库清除remote.repositories、lastUpdated、sha1脚本 1. 脚本功能 清除本地maven仓库的_remote.repositories、sha1、lastUpdated的文件 2. 脚本内容 set REPOSITORY_PATH%cd% rem 搜索中... for /f "delims" %%i in (dir /b /s "%REPOSITORY_PATH%\*…

Java 关键字:synchronized详解

synchronized详解 基本使用源码解析常见面试题好书推荐 基本使用 Java中的synchronized关键字用于在多线程环境下确保数据同步。它可以用来修饰方法和代码块 当一个线程访问一个对象的synchronized方法或代码块时&#xff0c;其他线程将无法访问该对象的其他synchronized方法或…

【愚公系列】2023年11月 Java教学课程 188-SpringCloud(Feign远程调用)

&#x1f3c6; 作者简介&#xff0c;愚公搬代码 &#x1f3c6;《头衔》&#xff1a;华为云特约编辑&#xff0c;华为云云享专家&#xff0c;华为开发者专家&#xff0c;华为产品云测专家&#xff0c;CSDN博客专家&#xff0c;阿里云专家博主&#xff0c;阿里云签约作者&#xf…

如何通过宝塔面板搭建一个本地MySQL数据库服务并实现远程访问

宝塔安装MySQL数据库&#xff0c;并内网穿透实现公网远程访问 文章目录 宝塔安装MySQL数据库&#xff0c;并内网穿透实现公网远程访问前言1.Mysql服务安装2.创建数据库3.安装cpolar3.2 创建HTTP隧道 4.远程连接5.固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网…

浙江师范黄昌勤老师关于情感分析的讲座

回放&#xff1a;https://share.weiyun.com/Wvaw4OoY 收获很大&#xff1a; 写几点&#xff0c; 1&#xff1a;小二聚焦 精细更有用 2&#xff1a;高产的秘诀就是 专注一个领域&#xff0c;不断延展。 3&#xff1a;好的文章技术不是本质&#xff0c;本质还是解决了什么教育问…

九、ffmpeg命令转封装

开了几天小差&#xff0c;今天继续学习ffmpeg。 准备测试使用的视频&#xff0c;并查看其信息 # 查看视频信息。使用Mediainfo也可以 ffprobe test.mp4 视频格式的信息如下。 保持编码格式&#xff1a;ffmpeg -i test.mp4 -vcodec copy -acodec copy test_copy.tsffmpeg -i…

WordPress网站如何修复数千个帖子的SEO错误

在本教程中&#xff0c;我们将向您展示如何解决您经常犯的SEO错误。 最好的是您不必花费太多时间&#xff0c;因为您不需要打开并编辑每个帖子。 相反&#xff0c;我们将向您展示如何使用 WordPress 内的电子表格来修复 WordPress 帖子的 SEO。 在这里&#xff0c;我们为您提…

nint和Pattern matching介绍(C#)

nint 最近看C# 9.0时&#xff0c;发现一个有意思的关键词&#xff0c;就是nint&#xff0c;第一次看到这个&#xff0c;于是好奇心爆棚&#xff0c;就去实际操作了一下。 nint i 1000; Console.WriteLine("i{0}", i);实际结果与int的结果是一样的&#xff0c;那为什…

ARM裸机-19(NandFlash和iNand)

1、NandFlash的接口 1.1、Nand的型号与命名 (1)、Nand的型号命名都有含义&#xff0c;就拿K9F2G08来示例分析一下&#xff1a;K9F表示是三星公司的NandFlash系列。2G表示Nand的大小是2Gbit (256MB)。08表示Nand是8位的 (8位就是数据线有8根)。 (2)、Nand命名中可以看出&#x…