概述Hibernate Session
Hibernate還是比較常用的,于是我研究了一下Hibernate Session,在這里拿出來和大家分享一下,希望對大家有用。
Hibernate Session
關(guān)于這一點(diǎn),你可以參考關(guān)于Hibernate和持久層的文章或者指南,也可以查詢各種對象和實(shí)例來了解怎么使用事務(wù),所以我不打算詳細(xì)說這些內(nèi)容。相反,我會更多考慮使用實(shí)體后我們需要做什么?這會對Hibernate Session 對象有怎樣的影響?是否可以使用現(xiàn)有的業(yè)務(wù)對象,甚至是數(shù)據(jù)訪問對象?當(dāng)我建立數(shù)據(jù)層的時(shí)候,我使用了Spring及其提供的一些類來管理數(shù)據(jù)庫連接,事務(wù)和會話。這些對象都在XML配置文件里面定義了,并與很多規(guī)則和關(guān)系緊密集成在Spring里。首先,通過Spring的依賴注射,DAO對象會被引入到應(yīng)用服務(wù)中(關(guān)于依賴注射,參見Bruce Tate的《Five Things I Love About Spring》一書)。然后,配置應(yīng)用服務(wù)以捕獲DAO異常(通過XML配置文件),讓Spring去處理。可是因?yàn)槲矣X得把Spring集成到數(shù)據(jù)加載應(yīng)用里會帶來相當(dāng)大的工作量。我對DAO對象做了輕微的修改,使得可以在web應(yīng)用之外使用他們。
例如說在PersonDAO類里面有一個(gè)保存person對象的方法。如果Hibernate Session 是由容器建立的,那這個(gè)方法就不能在容器外使用,因?yàn)檫@需要一個(gè)配置好的Session對象。以下是一個(gè)典型的PersonDAO,它由Spring 容器提供了對Session的支持。
- import org.springframework.orm.hibernate.HibernateTemplate;
- import test.pojos.Person;
- public class PersonDAO extends HibernateTemplate {
- public PersonDAO(){}
- public Person save(Person aPerson) {
- if(aPerson != null) super.save(person);
- return person;
- }
- }
上面的類繼承的是Spring HibernateTemplate 類,它提供了各種不錯(cuò)的使用Hibernate的基類方法。而且由于HibernateTemplate類維護(hù)了大多數(shù)的常見操作,你就只需要專注特定的持久層需求。當(dāng)然也應(yīng)該有相應(yīng)的異常處理,但在本次范例當(dāng)中,只要以上的就夠了。
【編輯推薦】