仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 717|回复: 12
打印 上一主题 下一主题

[学习教程] 发布一篇在Hibernate中处置批量更新和批量删除

[复制链接]
柔情似水 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:14:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景,于是改造了Oak,
批量更新是指在一个事件中更新多量量数据,批量删除是指在一个事件中删除多量量数据。以下程序间接经由过程HibernateAPI批量更新CUSTOMERS表中岁数年夜于零的一切纪录的AGE字段:
tx=session.beginTransaction();
Iteratorcustomers=session.find("fromCustomercwherec.age>0").iterator();
while(customers.hasNext()){
Customercustomer=(Customer)customers.next();
customer.setAge(customer.getAge()+1);
}
tx.commit();
session.close();
假如CUSTOMERS表中有1万条岁数年夜于零的纪录,那末Session的find()办法会一会儿加载1万个Customer对象到内存。当实行tx.commit()办法时,会清算缓存,Hibernate实行1万条更新CUSTOMERS表的update语句:
updateCUSTOMERSsetAGE=?….whereID=i;
updateCUSTOMERSsetAGE=?….whereID=j;
……
updateCUSTOMERSsetAGE=?….whereID=k;
以上批量更新体例有两个弱点:
(1)占用大批内存,必需把1万个Customer对象先加载到内存,然后逐一更新它们。
(2)实行的update语句的数量太多,每一个update语句只能更新一个Customer对象,必需经由过程1万条update语句才干更新一万个Customer对象,频仍的会见数据库,会年夜年夜下降使用的功能。
为了敏捷开释1万个Customer对象占用的内存,能够在更新每一个Customer对象后,就挪用Session的evict()办法当即开释它的内存:
tx=session.beginTransaction();
Iteratorcustomers=session.find("fromCustomercwherec.age>0").iterator();
while(customers.hasNext()){
Customercustomer=(Customer)customers.next();
customer.setAge(customer.getAge()+1);
session.flush();
session.evict(customer);
}
tx.commit();
session.close();
在以上程序中,修正了一个Customer对象的age属性后,就当即挪用Session的flush()办法和evict()办法,flush()办法使Hibernate立即依据这个Customer对象的形态变更同步更新数据库,从而当即实行相干的update语句;evict()办法用于把这个Customer对象从缓存中扫除进来,从而实时开释它占用的内存。
但evict()办法只能略微进步批量操纵的功能,由于不论有无利用evict()办法,Hibernate都必需实行1万条update语句,才干更新1万个Customer对象,这是影响批量操纵功能的主要要素。假设Hibernate能间接实行以下SQL语句:
updateCUSTOMERSsetAGE=AGE+1whereAGE>0;
那末以上一条update语句就可以更新CUSTOMERS表中的1万笔记录。可是Hibernate并没有间接供应实行这类update语句的接口。使用程序必需绕过HibernateAPI,间接经由过程JDBCAPI来实行该SQL语句:
tx=session.beginTransaction();
Connectioncon=session.connection();
PreparedStatementstmt=con.prepareStatement("updateCUSTOMERSsetAGE=AGE+1"
+"whereAGE>0");
stmt.executeUpdate();
tx.commit();
以上程序演示了绕过HibernateAPI,间接经由过程JDBCAPI会见数据库的历程。使用程序经由过程Session的connection()办法取得该Session利用的数据库毗连,然后经由过程它创立PreparedStatement对象并实行SQL语句。值得注重的是,使用程序仍旧经由过程Hibernate的Transaction接口来声明事件界限。
假如底层数据库(如Oracle)撑持存储历程,也能够经由过程存储历程来实行批量更新。存储历程间接在数据库中运转,速率加倍快。在Oracle数据库中能够界说一个名为batchUpdateCustomer()的存储历程,代码以下:
createorreplaceprocedurebatchUpdateCustomer(p_ageinnumber)as
begin
updateCUSTOMERSsetAGE=AGE+1whereAGE>p_age;
end;
<p>
学习JAVA的目的更多的是培养自身的工作能力,我觉得工作能力的一个核心就是:独立思考能力,因为只有独立思考后,才会有自己的见解
精灵巫婆 该用户已被删除
沙发
发表于 2015-1-18 19:39:10 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
兰色精灵 该用户已被删除
板凳
发表于 2015-1-23 05:40:09 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
再现理想 该用户已被删除
地板
发表于 2015-1-25 11:00:13 | 只看该作者
是一种使用者不需花费很多时间学习的语言
若天明 该用户已被删除
5#
发表于 2015-1-25 19:03:35 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
深爱那片海 该用户已被删除
6#
发表于 2015-1-29 15:15:14 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
谁可相欹 该用户已被删除
7#
发表于 2015-2-1 20:12:04 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
蒙在股里 该用户已被删除
8#
发表于 2015-2-7 14:51:49 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
灵魂腐蚀 该用户已被删除
9#
发表于 2015-2-22 08:20:52 | 只看该作者
是一种突破用户端机器环境和CPU
金色的骷髅 该用户已被删除
10#
发表于 2015-3-6 20:20:52 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
分手快乐 该用户已被删除
11#
发表于 2015-3-11 20:39:03 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
若相依 该用户已被删除
12#
发表于 2015-3-19 11:45:40 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
只想知道 该用户已被删除
13#
发表于 2015-3-27 20:34:39 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 20:56

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表