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

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

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

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

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

1.使用HQL进行批量操作

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

01.批量插入数据

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

02.批量修改

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

03.批量删除

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

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

  1. @Test
  2. //04.JDBC API 批量修改
  3. public void insertTest(){
  4. Work work=new Work() {
  5. public void execute(Connection connection) throws SQLException {
  6. PreparedStatement ps = connection.prepareStatement("update DEPT set deptName='业务部'where DEPTNO>?");
  7. ps.setInt(1,1);
  8. ps.executeUpdate();
  9. }
  10. };
  11. //session
  12. session.doWork(work);
  13. }

操作前:                                 操作后:

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

3.使用Session进行批量操作

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

  1. @Test
    public void testAdd(){
  2. Emp emp=null;
  3. for (int i = 0; i < 10000; i++) {
  4. emp=new Emp(i, "emp"+i);
  5. session.save(emp);
  6. if (i%30==0) {
  7. session.flush();
  8. session.clear();
  9. }
  10. }
  11. }

Hibernate三种批量处理数据的更多相关文章

  1. sqlserver 下三种批量插入数据的方法

    本文将介绍三种批量插入数据的方法,需要的朋友可以参考下 本文将介绍三种批量插入数据的方法.第一种方法是使用循环语句逐个将数据项插入到数据库中:第二种方法使用的是SqlBulkCopy,使您可以用其他源 ...

  2. 十几万条数据的表中,基于帝国cms 。自己亲身体验三种批量更新数据的方法,每一种的速度是什么样的

    需求是 上传Excel 读取里面的数据.根据Excel中某一个字段,与数据表中的一个字段的唯一性.然后把 Excel表中数据和数据库表中数据一次更改.本次测试一次更新31条数据. 本次测试基于帝国cm ...

  3. 简单理解Hibernate三种状态的概念及互相转化

    本文描述了Hibernate三种状态的概念及互相转化.Java对象的生命周期中有三种状态,而且互相转化.它们分别是临时状态,持久化状态,以及游离状态. AD:WOT2015 互联网运维与开发者大会 热 ...

  4. [转]hibernate三种状态详解

    本文来自 http://blog.sina.com.cn/u/2924525911 hibernate 三种状态详解 (2013-04-15 21:24:23) 转载▼   分类: hibernate ...

  5. mybatis的三种批量插入以及次效率比较

    1.表结构 CREATE TABLE `t_user` ( `id` varchar(32) CHARACTER SET utf8 NOT NULL COMMENT '主键', `name` varc ...

  6. Hive中的三种不同的数据导出方式介绍

    问题导读:1.导出本地文件系统和hdfs文件系统区别是什么?2.带有local命令是指导出本地还是hdfs文件系统?3.hive中,使用的insert与传统数据库insert的区别是什么?4.导出数据 ...

  7. Hive三种不同的数据导出的方式

    转自:http://blog.chinaunix.net/uid-27177626-id-4653808.html Hive三种不同的数据导出的方式,根据导出的地方不一样,将这些方法分为三类:(1)导 ...

  8. Hibernate三种状态,缓存,以及update更新问题

    一. Hibernate中对象的三种状态 1. 瞬时状态(transient) 当我们通过Java的new关键字来生成一个实体对象时,这时这个实体对象就处于自由状态,此时该对象只是通过JVM获得了一块 ...

  9. Hibernate三种状态;query查询;ResultTransformer转换为pojo对象;能够将query语句写在xml中;Criteria查询;ProjectionList总和/f分组等函数

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u010026901/article/details/24256091 Session操作过程中的po ...

随机推荐

  1. vs2012安装程序,无法注册ActiveX

    最近开发环境换成了vs2012,用C#写了一个ActiveX插件程序,然后添加一个安装程序,但是安装后,ie无法识别AcitveX,在ie的Manage add-ons中也找不到,这在vs2010是没 ...

  2. 准备看的ros相关源码

    进程通信:lcm 导航:navigation 3D可视化工具:rviz Mobile Robot Programming Toolkit:mrpt 其他: 人体肌肉:simbody openslam ...

  3. Python使用Timer实现验证码功能

    from threading import Timer import random class Code: def __init__(self): self.make_cache() def make ...

  4. SPOJ CIRU The area of the union of circles (计算几何)

    题意:求 m 个圆的并的面积. 析:就是一个板子题,还有要注意圆的半径为0的情况. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024 ...

  5. 在实战中使用nginx-rtmp遇到的TCP连接问题分析

    在实战中使用nginx-rtmp遇到的TCP连接问题分析 背景 前段时间公司做了一次体育赛事的现场直播,网络由某通信公司负责搭建,主要测试5G CPE上行网络的带宽和稳定性,为了做到万无一失,他们同时 ...

  6. 将字符串中的字符按Z字形排列,按行输出

    示例1: Input: s = "PAYPALISHIRING", numRows = 3 Output: "PAHNAPLSIIGYIR" 示例2: Pyth ...

  7. 201621123016 《Java程序设计》第十二周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系统或购物车 使用流与文件改造你的图书馆管理系统或购物车. 2.1 简述如何 ...

  8. HDU2819【二分匹配与矩阵的秩】

    题意: 给出一个矩阵问能否实现对角线全部是1,能的话输出路径,不能的话输出-1 思路: 首先根据矩阵的性质,这一定是一个满秩矩阵,所以只根据行或列交换就一定能实现. 所以行和列构成二分图,然后跑一发匈 ...

  9. 萌新java入门笔记

    首先声明以下内容只是散乱笔记,如果有误还望大侠指出!不胜感激! 基本数据类型: 大体和C语言类似: boolean truth = true;//逻辑型 //文字型 char c; String st ...

  10. MonogoDb的角色分类

    引用:  http://blog.csdn.net/kk185800961/article/details/45619863 https://docs.mongodb.org/manual/refer ...