自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Hibernate中Session方法介紹

開(kāi)發(fā) 后端
本文向您介紹Hibernate中的Session方法,并比較Hibernate 2和Hibernate 3中Session方法的區(qū)別。

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

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

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

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

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

從實(shí)現(xiàn)機(jī)制上,兩者沒(méi)什么分別

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

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());
}

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

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

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); //從一級(jí)緩存中清除

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

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

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

【編輯推薦】

  1. 關(guān)于Hibernate你必須知道的六個(gè)方面
  2. Hibernate入門方法之手低眼高
  3. 淺談Struts+Hibernate+Spring的整合方法
  4. Hibernate中Session.find/iterator方法
  5. 淺談Struts分頁(yè)中的Hibernate如何實(shí)現(xiàn)
責(zé)任編輯:張攀 來(lái)源: 新浪博客
相關(guān)推薦

2009-09-25 09:46:03

Hibernate s

2009-06-26 16:34:50

delete()方法Hibernate S

2009-06-26 16:33:09

saveOrUpdatHibernate

2009-09-27 14:41:05

Hibernate I

2009-09-29 16:04:29

Hibernate S

2009-09-24 17:24:20

Hibernate S

2009-09-22 10:09:21

Hibernate S

2009-09-25 10:53:40

Hibernate S

2009-09-23 17:03:08

Hibernate S

2009-06-18 13:42:48

Hibernate s

2009-09-25 13:51:13

Hibernate S

2009-09-23 17:18:16

Hibernate S

2009-09-24 13:25:58

Hibernate m

2011-06-16 10:48:33

session

2009-06-17 11:18:02

Hibernate延遲

2009-09-23 17:41:05

Hibernate事務(wù)

2009-09-28 10:24:58

Hibernate基礎(chǔ)

2009-09-24 16:13:05

Hibernate S

2009-09-22 09:27:29

Hibernate P

2009-09-28 13:49:44

Hibernate Q
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)