周末和 MIKE 吃飯的時候,他詢問,上次提說的問題,什么時候能寫出來。“對Session和Transaction的處理,最好單獨實現一個模板類來統一做”
溫故 居于常規的Hibernate的DAO代碼。例子做一個Create操作
這段代碼怎么樣? 假如這樣的代碼會出現在你的每一個DAO的每一個方法里面(除了SessionFactory建議寫成一個方法,因為你只需要一個實例)你能接受嗎?只說try catch 就夠你寫的。
如果代碼在每個地方都出現。那么我想就可以抽離出來。做成一個模板。具體該怎么做呢?今天我打算談三種比較成熟的做法。
① 采用Spring提供的模板功能
② 自己實現一個功能相當的模板
③ 其他可借鑒的實現
采用Spring提供的模板功能
看代碼:
比起上面的代碼,現在簡單多了吧?其實該做的事情都做了,只不過是被Spring封裝起來了。大致跟蹤一下Spring的SourceCode的實現。
1) 在抽象類HibernateDaoSupport中有一個方法getHibernateTemplate()。通過getHibernateTemplate()得到一個HibernateTemplate對象。
2) 在HibernateDaoSupport中有兩個方法。通過他們來的到這個 HibernateTemplate對象
3)
4)
到這里,感覺還不錯吧? 要是你沒有打算使用Spring呢?這種優勢不就沒有了嗎?那到未必,既然都有得“抄襲”拉!就自己弄一個吧!
自己實現一個功能相當的模板
不容易描述清楚,就用簡單的代碼來說明吧。
上面的DAO實現還有代碼風格都不推薦大家學習。實現一個優秀的DAO框架沒這么簡單。這種做法我沒有在真實項目中檢驗過,不確定,會不會有其他問題。因為這里我只是為了簡單的表述HibernateTemplate思想的實現。只要理解了這種思想,相信你能寫出更好更完美的實現。如果有更好的主意或者建議請Email告訴我。
其他可借鑒的實現
《深入淺出Hibernate》采用hibernatesynchronizer生成基礎代碼的方式,架構自己的持久層。作者自己實現了一個相似功能的HibernateTemplate和HibernateCallback接口。有興趣的話可以去研究一下。
這種能直接生成基礎代碼的方式很不錯。比起Spring我還是覺得麻煩了很多。而且我也還沒時間去全面玩這個插件(據說,有提供一些成熟的模板方式生成,我只玩過默認的生成方式)。
2005-12-6 SCSCHINA New Office
Powered by: BlogJava Copyright © Goingmm