日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
概括Hibernate批量處理

Hibernate有很多值得學(xué)習(xí)的地方,這里我們主要介紹Hibernate批量處理,包括介紹應(yīng)用程序也必須繞過Hibernate API,直接通過JDBC API來調(diào)用存儲(chǔ)過程等方面。

創(chuàng)新互聯(lián)堅(jiān)信:善待客戶,將會(huì)成為終身客戶。我們能堅(jiān)持多年,是因?yàn)槲覀円恢笨芍档眯刨?。我們從不忽悠初訪客戶,我們用心做好本職工作,不忘初心,方得始終。十余年網(wǎng)站建設(shè)經(jīng)驗(yàn)創(chuàng)新互聯(lián)是成都老牌網(wǎng)站營(yíng)銷服務(wù)商,為您提供成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、H5建站、網(wǎng)站制作、成都品牌網(wǎng)站建設(shè)、微信平臺(tái)小程序開發(fā)服務(wù),給眾多知名企業(yè)提供過好品質(zhì)的建站服務(wù)。

Hibernate批量處理其實(shí)從性能上考慮,它是很不可取的,浪費(fèi)了很大的內(nèi)存。從它的機(jī)制上講,Hibernate它是先把符合條件的數(shù)據(jù)查出來,放到內(nèi)存當(dāng)中,然后再進(jìn)行操作。實(shí)際使用下來性能非常不理想,在筆者的實(shí)際使用中采用下面的第三種優(yōu)化方案的數(shù)據(jù)是:100000條數(shù)據(jù)插入數(shù)據(jù)庫(kù),主流臺(tái)式機(jī)的配置,需要約30分鐘,呵呵,暈倒。

總結(jié)下來有三種來處理以解決性能問題:
1:繞過Hibernate API ,直接通過 JDBC API 來做,這個(gè)方法性能上是比較好的。也是最快的。
2:運(yùn)用存儲(chǔ)過程。
3:還是用Hibernate API 來進(jìn)行常規(guī)的批量處理,可以也有變,變就變?cè)冢覀兛梢栽诓檎页鲆欢ǖ牧康臅r(shí)候,及時(shí)的將這些數(shù)據(jù)做完操作就

刪掉,session.flush();session.evict(XX對(duì)象集); 這樣也可以挽救一點(diǎn)性能損失。這個(gè)“一定的量”要就要根據(jù)實(shí)際情況做定量參考了。一般為30-60左右,但效果仍然不理想。

1:繞過Hibernate API ,直接通過 JDBC API 來做,這個(gè)方法性能上是比較好的,也是最快的。(實(shí)例為 更新操作)

 
 
 
  1. Transaction tx=session.beginTransaction();   
  2. //注意用的是hibernate事務(wù)處理邊界  
  3. Connection conn=session.connection();  
  4. PreparedStatement stmt=conn.preparedStatement
    ("update CUSTOMER as C set C.sarlary=c.sarlary+1 where c.sarlary>1000");  
  5. stmt.excuteUpdate();  
  6. tx.commit();   
  7. //注意用的是hibernate事務(wù)處理邊界 

這小程序中,采用的是直接調(diào)用JDBC 的API 來訪問數(shù)據(jù)庫(kù),效率很高。避免了Hibernate 先查詢出來加載到內(nèi)存,再進(jìn)行操作引發(fā)的性能問題。

2:運(yùn)用存儲(chǔ)過程。但這種方式考慮到易植和程序部署的方便性,不建議使用。(實(shí)例為 更新操作)

如果底層數(shù)據(jù)庫(kù)(如Oracle)支持存儲(chǔ)過程,也可以通過存儲(chǔ)過程來執(zhí)行批量更新。存儲(chǔ)過程直接在數(shù)據(jù)庫(kù)中運(yùn)行,速度更加快。在Oracle數(shù)

據(jù)庫(kù)中可以定義一個(gè)名為batchUpdateCustomer()的存儲(chǔ)過程,代碼如下:

 
 
 
  1. create or replace procedure batchUpdateCustomer(p_age in number) 
    as begin update CUSTOMERS set AGEAGE=AGE+1 where AGE>p_age;
  2. end; 

以上存儲(chǔ)過程有一個(gè)參數(shù)p_age,代表客戶的年齡,應(yīng)用程序可按照以下方式調(diào)用存儲(chǔ)過程:

 
 
 
  1. tx = session.beginTransaction();  
  2. Connection con=session.connection();  
  3. String procedure = "{call batchUpdateCustomer(?) }";  
  4. CallableStatement cstmt = con.prepareCall(procedure);  
  5. cstmt.setInt(1,0);  
  6. //把年齡參數(shù)設(shè)為0  
  7. cstmt.executeUpdate();  
  8. tx.commit(); 

從上面程序看出,應(yīng)用程序也必須繞過Hibernate API,直接通過JDBC API來調(diào)用存儲(chǔ)過程。以上介紹Hibernate批量處理。


網(wǎng)站題目:概括Hibernate批量處理
文章轉(zhuǎn)載:http://www.dlmjj.cn/article/dhpeppj.html