成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Hibernate/JPA成功使用的十點(diǎn)心得

開發(fā) 后端
從一年前剛剛接觸Hibernate,到現(xiàn)在能成功的使用,總結(jié)了十點(diǎn)心得供大家分享。

大約一年以前,我為了學(xué)習(xí)一些Hibernate專業(yè)知識,因此我參加了一個Hibernate項(xiàng)目。從那時起,我一直在使用Hibernate框架下的JPA(Java持久API)實(shí)現(xiàn),使用的思想仍就是一樣的。那個項(xiàng)目使用了一個數(shù)據(jù)庫,這個數(shù)據(jù)庫規(guī)模有些大,略顯落后,并且還被許多的應(yīng)用程序共用。為了盡快加入到項(xiàng)目中,我開始學(xué)習(xí)一些Hibernate知識。從書本上的例子開始學(xué)習(xí),感覺很簡單,學(xué)起來也很快,但是發(fā)現(xiàn)從零開始開發(fā)一個項(xiàng)目,并且控制它又是另外一回事了。試著在一個大型,復(fù)雜,被許多應(yīng)用程序共用的數(shù)據(jù)庫上使用Hibernate就又完全不同了。弄清楚了我可能遭遇到的技術(shù)難點(diǎn),我開始想別的招了,要盡快從另外的方向開始,克服困難。
 
在最終的學(xué)習(xí)和實(shí)踐中,我發(fā)現(xiàn)我還是學(xué)到了許多重要的東西,雖然我們的項(xiàng)目還沒有完全做完,但是我認(rèn)為我們目前已經(jīng)非常漂亮的應(yīng)用了Hibernate/JPA的一些思想。現(xiàn)在我需要重新思考反省我所學(xué)到的東西,如下便是我學(xué)到的一些心得:
 
1)和數(shù)據(jù)庫管理員成為朋友
 
目前存在一個趨勢,就是一些Java開發(fā)者忽視數(shù)據(jù)庫管理員的重要性。這便犯了一個很大的錯誤,對于要取得任何的ORM(對象關(guān)系映射)技術(shù)的成功,和數(shù)據(jù)庫管理員保持一個良好的工作關(guān)系是至關(guān)重要的。有如下兩個原因:
 
單獨(dú)數(shù)據(jù)庫管理員雖然不能使Hibernate項(xiàng)目成功,但是他們通常可以讓這些項(xiàng)目失敗。
 
數(shù)據(jù)庫管理員對數(shù)據(jù)庫本身具有很好的洞察力,很好的職業(yè)習(xí)慣,告訴你一些易犯的錯誤和操作建議。我能記起這樣的很多例子,一個數(shù)據(jù)庫管理員的建議節(jié)約了我們很多的時間和提供給我們一個很好的解決方案。
 
在大多數(shù)情況下,擁有好的數(shù)據(jù)庫管理員,并且和他們保持良好的關(guān)系對你ORM(對象關(guān)系映射)工作至關(guān)重要。
 
2)從一開始使用(***強(qiáng)制使用)好的命名標(biāo)準(zhǔn)
 
我們知道對命名標(biāo)準(zhǔn)的討論將會有爭議的,但是我們必須明確一件事情,我們的命名要讓我們的數(shù)據(jù)模型有意義,這能讓開發(fā)者使用起來簡單,以免他們迷惑。所以,如何命名實(shí)體和屬性是非常重要的。我有我喜歡命名標(biāo)準(zhǔn),并且認(rèn)為他們是***的,但是在這里我不想把他們強(qiáng)加于你們。最重要的是你自己做出決定使用什么樣的命名標(biāo)準(zhǔn),并且讓所有人使用它。實(shí)際上,不僅僅命名標(biāo)準(zhǔn)需要統(tǒng)一,其它的也需要(如,布爾型用“Y/N” 或者 0/1表示)。


3)不要試著映射所有的屬性
 
我們總是設(shè)法使用工具,如Dali來映射所有的東西,然后形成一張表格(一些表格有上百列 !)。這最終會很麻煩。為什么?因?yàn)槲覀兪褂玫氖枪灿玫模惹暗臄?shù)據(jù)庫,有許多的字段是我們并不關(guān)心和從來不使用的。映射它們只會導(dǎo)致性能問題和造成混亂。
 
4)讓數(shù)據(jù)庫做自己擅長的工作
 
我們想有一個好的,清晰的數(shù)據(jù)模型,因此我們不惜任何代價寫一些額外的查詢語句來獲取對象相關(guān)數(shù)據(jù),要么使用存儲過程,要么使用函數(shù)。這是做法是錯誤的,數(shù)據(jù)庫優(yōu)勢在于存儲,而不是保持Hibernate創(chuàng)建或讀寫的數(shù)據(jù)。舉個例子,我們有一個對象,與之相關(guān)聯(lián)的有一個狀態(tài)。這個狀態(tài)在整個應(yīng)用程序中都要用到,因此,它毫無疑問是要執(zhí)行的,但是,我們不想每次都要單獨(dú)的寫一個查詢語句。這個問題在于,這個狀態(tài)是從一些統(tǒng)計計算中派生出來的,并且這些統(tǒng)計計算需要用到一對多的關(guān)系。每次從加載的對象中讀取數(shù)據(jù)的代價是非常高的。后來跟我們其中的一位數(shù)據(jù)庫管理員交流了一下,發(fā)現(xiàn)一個我們可以使用的sql函數(shù)能夠很快的獲得該狀態(tài)。我們使用@Formula來映射成一個狀態(tài)屬性,就能得到我們所需要的所有東西。這仍就是域模型的一部分,但是執(zhí)行起來非常好。有時像這樣的一個折衷的辦法能夠起到很大的效果。
 
5)分解數(shù)據(jù)庫
 
在一開始,我就想在Hibernate中模型化整個數(shù)據(jù)庫。結(jié)果發(fā)現(xiàn)這是不切實(shí)際的,原因如下:
a)這是一項(xiàng)巨大的工程,并且要花費(fèi)幾周的時間,而用戶根本看不到你做了什么實(shí)際的工作。
 
b)我不可能在***次就把它弄好,后繼的開發(fā)者無論如何都會修改它們的。
 
現(xiàn)在有一個趨勢,就是希望在開始之前,將所有的事情都進(jìn)行映射,但是,當(dāng)時你開始這么做后,你不需在這上面花很多的時間。我后來發(fā)現(xiàn)一個好的辦法,就是將數(shù)據(jù)庫分解,工作的時候一塊一塊的進(jìn)行,發(fā)現(xiàn)這很有幫助。


6)密切注意觸發(fā)器
 
密切注意數(shù)據(jù)庫觸發(fā)器有如下兩個原因:
 
a)在后臺觸發(fā)器很隱蔽的執(zhí)行了一些功能,讓你很是疑惑,不知道發(fā)生了什么。
 
b)當(dāng)你在Hibernate端需要復(fù)制一些東西的時候,觸發(fā)器會做一些手腳。之前我們好幾次沒有認(rèn)識到這個教訓(xùn),導(dǎo)致我們丟失了很多數(shù)據(jù),這些都是由觸發(fā)器引起的,這幾乎讓我們很是郁悶。
 
7)避免使用工具來自動生成你的模型

 
沒錯,這些工具的使用可以節(jié)約時間(雖然我們發(fā)現(xiàn)了Dali有一個很嚴(yán)重的bug,但是我們還是使用它),但是***你不得不重新做很多的事情。其實(shí)手動也花費(fèi)不了你很多的時間,當(dāng)你親自做的時候,這可以讓你有機(jī)會熟悉那些數(shù)據(jù)。
 
8) 盡量多的使用命名查詢語句(NamedQueries)
 
雖然很容易寫查詢語句,但是在許多的情況下,使用NamedQueries會更好,這會有助于你完成兩件事情:
 
a)它能更加重用,因?yàn)楸幻牟樵冋Z句通常在代碼的重要地方。
 
b)你的查詢語句在開始的時候就是正確的,那么在查詢語句中的錯誤更加容易發(fā)現(xiàn)。
要習(xí)慣這樣做需要花一些時間,但是這么做是值得的。
 
9)預(yù)期管理
 
對于任何一種框架、技術(shù)、甚至觀念來說,這是非常重要的,要銘記在心。由于某些原因,人們傾向于專注某一個特征,這些特征實(shí)際上或許不存在,或許被夸大。有時它很小,很容易理解(舉個例子,理解一些實(shí)際的工作,需要在Hibernate中映射),有時我也不知道他們是如何管理實(shí)現(xiàn)一些概念(如Hibernate是如何管理計劃修正的)。無論如何,找到預(yù)期目標(biāo)是什么,然后管理它們是非常重要的。如果你的團(tuán)隊(duì)認(rèn)為Hibernate會使得數(shù)據(jù)庫管理員沒有用處,把他們解雇,那么你將會有一個潛在的問題存在。
 
10)使用富域模型(rich domain modeling)
 
我所遇到的一件很悲哀的事情,就是在域?qū)ο髢H僅是一個簡單的數(shù)據(jù)容器的時候,我要使用Hibernate,而像Hibernate這樣的工具讓我們以面向?qū)ο蟮姆绞絹硎褂脭?shù)據(jù)。簡單的映射數(shù)據(jù)只是讓我們停留在中途。當(dāng)我本能的想到使用富域模型(rich domain modeling)的時候,我發(fā)現(xiàn)我們可以重用很多的代碼,我們的其它層變得不那么混亂了,并且我們的代碼更加容易測試。

您正在閱讀:Hibernate/JPA成功使用的十點(diǎn)心得

【編輯推薦】

  1. hibernate(jpa)復(fù)合主鍵annotation聲明方法
  2. 使用hibernate的11大優(yōu)勢
  3. OpenCore: OSGi上部署Hibernate的四種方式
責(zé)任編輯:張攀 來源: IT168
相關(guān)推薦

2012-10-23 11:14:45

BYOD移動設(shè)備管理移動設(shè)備

2009-06-25 13:59:59

java認(rèn)證FileFilter

2013-01-06 10:53:10

2012-01-13 10:36:07

2009-08-12 18:10:33

C#類型轉(zhuǎn)化

2024-05-14 10:03:51

2010-02-26 09:08:14

Android系統(tǒng)改進(jìn)

2012-09-05 09:40:29

2022-09-05 08:02:58

網(wǎng)絡(luò)await?catch

2017-06-28 15:24:10

大數(shù)據(jù)數(shù)據(jù)分析心得

2017-07-05 18:10:23

大數(shù)據(jù)分析思路心得

2011-10-25 10:51:08

私有云虛擬化公有云

2021-11-25 07:46:06

云計算云計算環(huán)境云應(yīng)用

2012-02-14 14:59:45

2025-03-03 00:44:44

2009-05-18 18:02:43

2010-05-04 09:55:31

Windows 7系統(tǒng)

2017-03-25 19:55:38

Linux系統(tǒng)開源

2009-02-27 17:16:00

刀片服務(wù)器服務(wù)器

2013-09-11 16:29:02

產(chǎn)品經(jīng)理產(chǎn)品運(yùn)營
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 99久久久久久 | 国产精品国产精品国产专区不卡 | 久久成人人人人精品欧 | 一区二区三区回区在观看免费视频 | 成人黄视频在线观看 | 亚洲精品视频免费观看 | 日韩一区二区在线看 | 九九综合 | 中文字幕一区二区三区精彩视频 | 国产黄色在线观看 | 天天夜碰日日摸日日澡 | 男女羞羞视频在线免费观看 | 国产真实精品久久二三区 | 国产精品国产三级国产aⅴ无密码 | 九九久久精品 | 久久精品视频网站 | 久久精品免费 | 午夜久草| 91精品国产91久久久久久 | 中文在线a在线 | 国产一区视频在线 | av电影一区二区 | 国产精品久久久久久久久久久免费看 | 性一爱一乱一交一视频 | 欧美亚洲国产一区二区三区 | 蜜臀av日日欢夜夜爽一区 | 精品二区视频 | 国产乱码精品一区二区三区中文 | 欧美激情综合五月色丁香小说 | 午夜精品一区二区三区在线观看 | www日本在线 | 亚洲黄色高清视频 | 欧美日韩亚洲国产 | 99精品久久久国产一区二区三 | 福利网站在线观看 | 亚洲久视频 | 在线精品亚洲欧美日韩国产 | 国产激情亚洲 | 久久久精品一区二区三区 | h视频免费在线观看 | 久久久久久免费观看 |