DAO中對Hibernate的封裝

2021-04-12 20:04:46 字數 1922 閱讀 8633

我在程式裡也是使用 dao 模式來封裝資料庫操作的,這兩天仔細的看了這裡的文章,也

修改了我的 dao 的設計,把我的思路和大家共享下:

帳戶類,乙個 po:

**account    

dao 介面

**inte***ce accountdao    

accountdao 的實現

**class accountdaohibernate    

public

void updateaccount( account account )    

public

void removeaccount( string username )    

public account findbyusername( string username )    

}   

hibernateutil 是對 hibernate 的基本 crud 操作的封裝

我參考了 poll 的實現

**class hibernateutil    

public

static

void update( object object ) throws hibernateexception    

public

static

void remove(class clazz, string id) throws hibernateexception    

public

static object findbyid( class clazz, string id ) throws hibernateexception    

}   

hibernatesessionfactory 使用 threadlocal 做 session 管理,實現和 hibernate **上的一樣

參考:http://hibernate.bluemars.net/42.html

**class hibernatesessionfactory    

public

static session currentsession()    

return s;   

}   

public

static

void closesession()    

}   

說明:

1.dao 模式的目的是為了把資料庫操作封裝在 dao 層下

session 應該被封裝在 dao 層裡

2.何時關閉 session:

由於使用了 threadlocal 來管理 session,我沒有在 dao 的方法裡關閉 session

這樣,同乙個 thraed 裡的各個 dao 方法可以訪問到 同乙個 session,可以利用

hibernate 的 lazy load 功能。

在 web 應用程式裡可以使用 hibernatefilter 來處理 session 的關閉:

參考:http://hibernate.bluemars.net/110.html

**public

class hibernatefilter implements filter    

public

void dofilter( ... )  finally  catch (hibernateexception e)    

}   

}   

public

void destroy()    

}   

3.對 transaction 的處理

不在 dao 層處理 transaction

如果確實需要 transaction ,在上一層,比如業務層裡的 session bean 裡來做。 

hibernate中的關聯之多對多

二 hibernate的多對多 三 多對多關係注意事項 3.3 關聯關係編輯,不需要直接操作橋接表,hibernate的主控方會自動維護 處理 建立乙個橋接表 中間表 將乙個多對多關係轉換成兩個一對多 注1 資料庫多表聯接查詢 永遠就是二個表的聯接查詢 a b c d t1 c d t2 d t3注...

Spring 對Hibernate 的簡化

spring 對hibernate 的簡化 hibernate 的持久層訪問必須按如下步驟進行 1 建立configuration 例項。2 建立sessionfactory 例項。3 建立session 例項。4 開啟事務。5 開始持久化訪問。6 提交事務。7 如果遇到異常,回滾事務。8 關閉se...

hibernate的多對多

近日工作中遇到多對多,以前未曾用過hibernate,這次也算是摸著石頭過河。之前試驗了級聯的cascadetype.all,卻發現當刪除部門表的時候,中間表資料刪除了,結果將人員表相關聯的資料也全部刪除了。後來將級聯改為cascadetype.persist,cascadetype.merge,倒...