Hibernate批量操作数据

批量处理数据

①通过session来进行批量操作

?具体的做法是在处理完一个对象或小批量对象后,立刻调用flush方法清理缓存,然后再调用clear方法清空缓存

<!-- 设置JDBC单次批量处理的数目 -->

<property name=”hibernate.jdbc.batch_size”>20</property>

如果对象采用”identity” 标示符生成器,则Hibernate无法在JDBC层进行批量插入操作

进行批量操作是建议关闭二级缓存!!!

<!-- 关闭二级缓存 -->

<property name=”hibernate.cache.user_second_level_cache”>false</property>

②使用callablestatement调用存储过程

1.插入数据的存储过程:

Create or replace procedure login_insert(username in varchar,password in varchar,age in number) as

Begin

Insert into login (username,password,age) values (username,password,age);

End;

2.更新数据的存储过程:

Create or replace procedure login_Update(a in number) as

Begin

Update lobin set age=a where username=’Tom’;

End;

3.删除数据的存储过程:

Create or replace procedure login_delete(uname in varchar) as

Begin

Delete form login where USERNAME = uname;

End;

//调用插入数据的存储过程

Session session = new Configuration().configure().buildSessionFactory().openSessin();

Transaction tran  =session.beginTransaction();

CallableStatement cst = session.connection.prepareCall(“{call login_insert(?,?,?)}”);

cst.setString(1,”aaa”);

cst.setString(2,”22222”);

cst.setLong(3,21);

cst.executeUpdate();

Tran.commit();

Session.close();

查询数据的存储过程:

*Logins表示系统游标,将查询结果赋给logins。

Create or replace procedure login_getlist(logins OUT SYS_REFCURSOR)

Begin

Open logins for select * from login;

End;

?在hibernate中如何调用这个带有输出参数(返回结果集)的存储过程:

//调用带有返回结果集的存储过程

Session session = new Configuration().configure().buildSessionFactory().openSession();

Transaction tran = session.beginTransaction();

CallableStatement cst = session.connection().prepareCall(“{call login_getlist(?)}”);

/*调用CallableStatement的registerOutParameter()方法,传参,”1”代表第一个问号,第二个参数Oracle的数据类型,因为存储过程是用系统游标类型的输出参数来返回的结果集,所以在这里要传入一个Oracle游标的类型*/

cst.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);

cst.execute();

ResultSet rs = (ResultSet)cst.getObject(1);//获取存储过程的输出参数,也就是系统游标的输出参数,要使用强制类型转换

While(rs.next()){

System.out.print(“用户名:”+rs.getString(“username”));

System.out.print(“密码:”+rs.getString(“password”));

System.out.print(“年龄:”+rs.getString(“age”));

}

Tran.commit();

Session.close();

使用命名SQL调用存储过程:

<!-- 调用查询的存储过程, callable=”true”代表我们的声明的命名支持SQL存储过程,不能省略,省略会报错-->

<sql-query name=”loginGetList”callable=”true”>

{call login_getlist(?)}

<return alias=”1” class=”com.test.Login” />

</sql-query>

Hibernate批量操作数据,布布扣,bubuko.com

时间: 2024-10-21 01:58:02

Hibernate批量操作数据的相关文章

Hibernate批量处理海量数据的方法

本文实例讲述了Hibernate批量处理海量数据的方法.分享给大家供大家参考,具体如下: Hibernate批量处理海量其实从性能上考虑,它是很不可取的,浪费了很大的内存.从它的机制上讲,Hibernate它是先把符合条件的数据查出来,放到内存当中,然后再进行操作.实际使用下来性能非常不理想,在笔者的实际使用中采用下面的第三种优化方案的数据是:100000条数据插入数据库, 需要约30分钟,呵呵,晕倒.(本人10分钟插入1000000条数据(字段比较小)) 总结下来有三种来处理以解决性能问题:

EF批量操作数据与缓存扩展框架

前言 在原生的EF框架中,针对批量数据操作的接口有限,EF扩展框架弥补了EF在批量操作时的接口,这些批量操作包括:批量修改.批量查询.批量删除和数据缓存,如果您想在EF中更方便的批量操作数据,这个扩展将对您来说很有用. 下载安装 这个框架支持通过NuGet包管理器进行安装,你可以在包管理器中搜索:EntityFramework.Extended,最简单的方法就是程序包管理控制台进行安装,安装命令如下: PM > Install - Package EntityFramework.Extended

hibernate 批量处理数据

批量处理数据是指在一个事务中处理大量数据. 在应用层进行批量操作, 主要有下面方式: 通过 Session 通过 HQL 通过 StatelessSession 通过 JDBC API(仅仅要会用这样的,其它作为了解) 通过 Session 来进行批量操作 Session 的 save() 及 update() 方法都会把处理的对象存放在自己的缓存中. 假设通过一个 Session 对象来处理大量持久化对象, 应该及时从缓存中清空已经处理完成而且不会再訪问的对象. 详细的做法是在处理完一个对象或

hibernate批量删除和更新数据

转载自:http://blog.csdn.net/yuhua3272004/article/details/2909538 Hibernate3.0 採用新的基于ANTLR的HQL/SQL查询翻译器,在Hibernate的配置文件里,hibernate.query.factory_class属性用来选择查询翻译器. (1)选择Hibernate3.0的查询翻译器: hibernate.query.factory_class= org.hibernate.hql.ast.ASTQueryTrans

Hibernate批量处理数据、HQL连接查询

一.批量处理操作 批量处理数据是指在一个事务场景中处理大量数据.在应用程序中难以避免进行批量操作,Hibernate提供了以下方式进行批量处理数据: (1)使用HQL进行批量操作     数据库层面 (2)使用JDBC API进行批量操作  数据库层面 (3)使用Session进行批量操作   会进缓存 1.使用HQL进行批量操作 HQL可以查询数据,也可以批量插入.更新和删除数据.HQL批量操作实际上直接在数据库中完成,处理的数据不需要加载到Session缓存中.使用Query接口的execu

Hibernate批量更新和批量删除批量添加 1(转)

通常,在一个Session对象的缓存中只存放数量有限的持久化对象,等到Session对象处理事务完毕,还要关闭Session对象,从而及时释放Session的缓存占用的内存.批量处理数据是指在一个事务中处理大量数据.以下程序在一个事务中批量更新CUSTOMERS表中年龄大于零的所有记录的AGE字段:Transaction tx = session.beginTransaction();Iterator customers=session.createQuery("from Customer c

【java】itoo项目实战之hibernate 批量保存优化

在itoo中.基本上每一个系统都有一个导入功能,大量的数据填写进入excel模板中.然后使用导入功能导入的数据库中,这样能够大大的提高工作效率. 那么导入就涉及到了批量保存数据库的问题了. 那么通常情况下,在一个Session对象的缓存中数量有限的持久化对象,等到Session对象处理事务完成,还要关闭Session对象,从而及时释放session的缓存占用的内存.在批量保存1万条数据,假设一次性把须要保存的1万条数据载入到内存职工,当运行事务提交的时候,就会清理缓存,hibernate运行1万

hibernate批量更新和删除数据

批量处理  不建议用Hibernate,它的insert效率实在不搞,不过最新版本的Hibernate似乎已经在批量处理的时候做过优化了,设置一些参数如batch_size,不过性能我没有测试过,听说是这样.我记得以前在做大批量数据转移的时候我们测试过Hibernate,很慢,直接Pass,当时我们的系统由于用多个数据库,所以用的jdbc,如果不考虑移植还是可以用存储过程的. 存储过程对数据库依赖过强,不便系统移植   浅析Hibernate下数据批量处理方法 关键字: hibernate指处理

hibernate 批量增加 修改 删除

4.2  Hibernate的批量处理 Hibernate完全以面向对象的方式来操作数据库,当程序里以面向对象的方式操作持久化对象时,将被自动转换为对数据库的操作.例如调用Session的delete()方法来删除持久化对象,Hibernate将负责删除对应的数据记录:当执行持久化对象的set方法时,Hibernate将自动转换为对应的update方法,修改数据库的对应记录. 问题是如果需要同时更新100?000条记录,是不是要逐一加载100?000条记录,然后依次调用set方法——这样不仅繁琐