我在程式裡也是使用 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,倒...