Hibernate經驗簡單描述
Hibernate有很多值得學習的地方,這里我們主要介紹我的一些Hibernate經驗,包括介紹避免使用工具來自動生成你的模型等方面。
大約一年以前,我為了學習一些Hibernate經驗,因此我參加了一個Hibernate項目。從那時起,我一直在使用Hibernate框架下的JPA(Java持久API)實現,使用的思想仍就是一樣的。那個項目使用了一個數據庫,這個數據庫規模有些大,略顯落后,并且還被許多的應用程序共用。為了盡快加入到項目中,我開始學習一些Hibernate知識。從書本上的例子開始學習,感覺很簡單,學起來也很快,但是發現從零開始開發一個項目,并且控制它又是另外一回事了。試著在一個大型,復雜,被許多應用程序共用的數據庫上使用Hibernate就又完全不同了。弄清楚了我可能遭遇到的技術難點,我開始想別的招了,要盡快從另外的方向開始,克服困難。
在最終的學習和實踐中,我發現我還是學到了許多重要的東西,雖然我們的項目還沒有完全做完,但是我認為我目前已經非常漂亮的應用了Hibernate/JPA的一些思想。現在我需要重新思考反省我所學到的東西,如下便是我學到的一些Hibernate知識:
1.避免使用工具來自動生成你的模型
沒錯,這些工具的使用可以節約時間(雖然我們發現了Dali有一個很嚴重的bug,但是我們還是使用它),但是***你不得不重新做很多的事情。其實手動也花費不了你很多的時間,當你親自做的時候,這可以讓你有機會熟悉那些數據。
2.盡量多的使用命名查詢語句(NamedQueries)
雖然很容易寫查詢語句,但是在許多的情況下,使用NamedQueries會更好,這會有助于你完成兩件事情:
◆它能更加重用,因為被命名的查詢語句通常在代碼的重要地方。
◆你的查詢語句在開始的時候就是正確的,那么在查詢語句中的錯誤更加容易發現。
要習慣這樣做需要花一些時間,但是這么做是值得的。
3.預期管理
對于任何一種框架、技術、甚至觀念來說,這是非常重要的,要銘記在心。由于某些原因,人們傾向于專注某一個特征,這些特征實際上或許不存在,或許被夸大。有時它很小,很容易理解(舉個例子,理解一些實際的工作,需要在Hibernate中映射),有時我也不知道他們是如何管理實現一些概念(如Hibernate是如何管理計劃修正的)。無論如何,找到預期目標是什么,然后管理它們是非常重要的。如果你的團隊認為Hibernate會使得數據庫管理員沒有用處,把他們解雇,那么你將會有一個潛在的問題存在。
4.使用富域模型(rich domain modeling)
我所遇到的一件很悲哀的事情,就是在域對象僅僅是一個簡單的數據容器的時候,我要使用Hibernate,而像Hibernate這樣的工具讓我們以面向對象的方式來使用數據。簡單的映射數據只是讓我們停留在中途。當我本能的想到使用富域模型(rich domain modeling)的時候,我發現我們可以重用很多的代碼,我們的其它層變得不那么混亂了,并且我們的代碼更加容易測試。以上是分享我的Hibernate經驗。
【編輯推薦】