日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Hibernate中Session方法介紹

查詢系統(tǒng)往往是一個系統(tǒng)性能表現(xiàn)的重要的方面,相對于刪除和更新來說,查詢的機制在很大程度上決定了一個系統(tǒng)的性能。

Hibernate2中,Session方法接口提供了如下的辦法完成批量數(shù)據(jù)的查詢(Session.locad單一數(shù)據(jù)的查詢)

List Session.find(…..)
Iterator Session.iterator(……)

Hibernate3中上述接口已經(jīng)從Session方法中廢除,統(tǒng)一由Query接口提供,分別對應如下的辦法:

List session.createQuery().list()
Iterator session.createQuery.iterator()

從實現(xiàn)機制上,兩者沒什么分別

Find/iterator方法可以根據(jù)查詢條件返回符合條件的實體集。如下:

String sql=”from Tuser user where user.age>?”;
List ls = session.find(sql,new Integer(14),Hibernate.INTEGER);
int len = ls.size();
for(int i=0;i
     
      
Tuser user = (Tuser)ls.get(i);
System.out.println(“Username: ” + user.getName());
}

String sql=”from Tuser user where user.age>?”;
Iterator iterator = session.iterator(sql,new Integer(14),Hibernate.INTEGER);
While(iterator.next())
Tuser user = (Tuser)iterator.next(i);
System.out.println(“Username: ” + user.getName());
}

兩者實現(xiàn)了統(tǒng)一的功能,但是大家在執(zhí)行時看看他們輸出的SQL語句,會發(fā)現(xiàn)有很多不同。兩者的執(zhí)行性能是不一樣的,但是這又與Hibernate提供的緩存機制有很大的關系。

Find方法無法利用利用緩存來提供其執(zhí)行性能,但iterator可以利用緩存機制來達到提高查詢的性能。另外在內(nèi)存使用方面,find方法是一次性查詢處所有的結(jié)果,如果查詢結(jié)果是海量的數(shù)據(jù),那么就有可能出現(xiàn)內(nèi)存溢出。但可以利用iterator和evict方法結(jié)合使用來將內(nèi)存的消耗保持在一個可以接受的范圍:

String sql=”from Tuser user where user.age>?”;
Iterator iterator = session.iterator(sql,new Integer(14),Hibernate.INTEGER);
While(iterator.next())
Tuser user = (Tuser)iterator.next(i);
session.evict(user); //從一級緩存中清除

二級緩存可以設置最大的緩存量,達到峰值時自動清除舊緩存數(shù)據(jù),但我們這里可以通過編碼指定將對象從二級緩存中清除,有助于保存緩存的有效性

sessionFactory.evict(Tuser.class,user.getID());
System.out.println(“Username: ” + user.getName());
}

上面的方法只是解決了部分的問題,由于JVM的異步的內(nèi)存回收機制,無效的對象還會不斷地在內(nèi)存中積累等待回收。如果數(shù)據(jù)量較大,會頻繁激發(fā)JVM回收,造成性能急劇下降,因此實際開發(fā)中,建議采用SQL語句或者存儲過程實現(xiàn)。

【編輯推薦】

  1. 關于Hibernate你必須知道的六個方面
  2. Hibernate入門方法之手低眼高
  3. 淺談Struts+Hibernate+Spring的整合方法
  4. Hibernate中Session.find/iterator方法
  5. 淺談Struts分頁中的Hibernate如何實現(xiàn)

當前名稱:Hibernate中Session方法介紹
本文路徑:http://www.5511xx.com/article/cohpocs.html