天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

為什么要學習Hibernate?

在我做過的很多項目的過程中,我一直有一個懸而未決的問題在困擾我,那就是持久層的開發(fā)。持久層的開發(fā)一般來說要么用CMP,要么用JDBC+DAO。 CMP就不用說了,它對我來說是一種失敗的實踐,而JDBC+DAO也存在很多的困難,我很難做到把關(guān)系表記錄完整的映射到持久對象的關(guān)系上來,這主要體現(xiàn)在多表的關(guān)系無法直接映射到對持久對象的映射上來,可能是一個表映射多個持久對象,有可能是多個表映射一個持久對象,更有可能的是表的某些字段映射到一個持久對象,但是另外一些字段映射到別的持久對象上。而且即使這些問題都處理好了,也不能直接按照對象的方式來對持久對象(PO)編程,因為存在1:N關(guān)系的持久對象的查詢其實就是1+n次對數(shù)據(jù)庫的SQL,我曾經(jīng)有一次失敗的持久層設(shè)計,結(jié)果是某個關(guān)聯(lián)很多其它持久對象的PO一查詢就是5n+1次 sql,速度慢的不得了,最后不得不整個修改底層設(shè)計,最后等于是完全拋棄了對象設(shè)計,完全是按照表字段進行操作。

  但是這樣做非常難受,因為系統(tǒng)的設(shè)計是從需求設(shè)計,系統(tǒng)設(shè)計這樣自頂而下的,結(jié)果都到了詳細設(shè)計階段了,被持久層映射問題限制,不得不自底向上修改設(shè)計方案,又回到了按照過程進行編程的老路上來,非常的糟糕。

  我對這個問題思考了很久,最后終于意識到這其實是一個很經(jīng)典的問題:對象和關(guān)系的映射問題。實際上自從OOP編程流行以后,就存在這個難題了,所以才有人提出關(guān)系數(shù)據(jù)庫進行重新設(shè)計,改用對象數(shù)據(jù)庫,但實際上關(guān)系數(shù)據(jù)庫并沒有被淘汰,于是就只能在上層的應(yīng)用層找解決方案。這時候我明白了我需要的實際上是一種 ORM產(chǎn)品。

  我最早想到的ORM就是JDO,于是我下載了兩個JDO產(chǎn)品,準備認真的學習一下,但是研究了一段時間之后,我發(fā)現(xiàn)我對JDO非常的失望,原因如下:

  1、 JDO沒有一個好的開源免費實現(xiàn),好的產(chǎn)品都是商業(yè)產(chǎn)品,并且在國內(nèi)沒有銷售和技術(shù)支持。這就造成了JDO只有學習之用,不能把它用在實際項目中,否則的話,你把軟件賣給客戶的時候,還要告訴他,你還要另外去買一個國外的軟件產(chǎn)品,并且在國內(nèi)沒有技術(shù)支持,出了持久層的問題,我們也解決不了,請你自己打國際長途去解決問題,你認為客戶能答應(yīng)嗎?

  2、JDO不是一個輕量級封裝,它試圖建立一個完整的持久層框架,但是還很不完善,造成了JDO 感覺比較笨重,很多操作方式令人覺得煩瑣和古怪。這加重了程序員學習和編程的負擔,而且封裝的太多會造成一個嚴重的問題就是一旦出現(xiàn)報錯信息,調(diào)試起來非常困難,你很難準確的定位錯誤究竟出在哪里,封裝的越輕,問題越容易定位,越容易解決,封裝的越重,問題越復(fù)雜,越找不到原因,CMP就是一個很好的例子,出了錯誤,調(diào)試起來非常困難和麻煩。

  3、JDO的標準很不完善,存在重大缺陷。最主要的問題體現(xiàn)在PO不能脫離PM(相當于 Hibernate的Session)而存在,這是個非常嚴重的問題,會造成編程的時候進行大量VO的拷貝操作,煩瑣極了;另外一個重大缺陷是靜態(tài)的 POJO的Enhancer,不能運行期動態(tài)Enhance,無法進行增量編譯和調(diào)試,編程和調(diào)試起來非常煩瑣,每次都要手共運行一個工具對POJO進行 Enhance;此外還有一些缺陷,例如JDOQL不完善,映射關(guān)系的表達不夠強大等等。

  4、JDO產(chǎn)品的分裂。這個問題也比較嚴重,由于JDO1.0標準的缺陷,而JDO2.0標準還遙遙無期,而各個JDO廠商為了能夠在競爭中脫穎而出,那么除了在易操作性和性能上的提高之外,想要吸引客戶,就必須有自己的產(chǎn)品特色。那么1.0標準的缺陷正好給了他們發(fā)揮的舞臺,每個廠商都會有自己獨到的解決方案來解決標準的缺陷,然而這卻造成了JDO 產(chǎn)品事實上的分裂。這種分裂嚴重到什么程度?我可以簡單舉個例子:你寫好的POJO,用一種JDO的Enhancer進行Enhance過以后得到的 PO,在另一個JDO產(chǎn)品上跑不起來。這很像當年Unix的分裂,結(jié)果就是二進制代碼級的不兼容,而只能在C源代碼級兼容。現(xiàn)在的JDO也有這樣的趨勢,就像App Server的差別一樣,一個在Weblogic上開發(fā)好的EJB,移植到Websphere,你一定需要重新進行配置。

  我心目中的ORM最好有如下的特點:

  1、開源和免費的License,我可以在需要的時候研究源代碼,改寫源代碼,進行功能的定制。

  2、輕量級封裝,避免引入過多復(fù)雜的問題,調(diào)試容易,也減輕程序員的負擔。

  3、具有可擴展性,API開放,當本身功能不夠用的時候,可以自己遍碼進行擴展。

  4、開發(fā)者活躍,產(chǎn)品有穩(wěn)定的發(fā)展保障。

  拋棄了JDO以后,我根據(jù)上面的原則,先后排除了TopLink,CocoBase,Castor等,最后選擇了Apache OJB和Hibernate。

  OJB的排除很容易做出,一是因為它的文檔太簡單,太少;二是因為OJB計劃下一個版本全面支持JDO,它的API會有重大變動,所以現(xiàn)階段學習OJB是個錯誤,等它的API穩(wěn)定了以后再學習不遲。

  Hibernate的發(fā)現(xiàn)是很偶然的事情,只是在別人提到JDO的產(chǎn)品中,附帶提了提而已,但當我開始研究Hibernate之后,我發(fā)現(xiàn)終于找到了我夢寐以求的ORM了。

  Hibernate 完全符合我上面提到的標準之外,也解決掉了JDO的所有缺陷,而且方式之優(yōu)雅令人贊嘆。Hibernate的文檔也是非常非常有特色的地方,它不僅僅是 Hibernate的功能介紹那么簡單,它實際上是一個持久層設(shè)計的最佳實踐的經(jīng)驗總結(jié),文檔里面的例子,文檔里面的總結(jié)全部都是最佳設(shè)計的結(jié)晶。我認真的把Hibernate讀下來的感覺就是,不單單把Hibernate掌握住了,而且對持久層的設(shè)計的經(jīng)驗都長了一大塊,以前可從來沒有覺得持久層的設(shè)計還有那么多的學問,也由此感覺到Gavin絕對是一個大牛人。

  當然選擇Hibernate最最重用的原因是Hibernate是一個我能夠完完全全駕馭的了的軟件。Hibernate的源代碼非常少,而且寫的非常簡潔,我總覺得挺奇怪的,這么少的源代碼能夠?qū)崿F(xiàn)這么多的功能,是個奇跡。 Hibernate的源代碼樹分的很清楚簡單,源代碼很易讀,我一旦碰到文檔中沒有講到的問題,或者文檔中提到但是我搞不清楚的地方,我就去源代碼中找,所有的問題都豁然開朗,而且讓我對Hibernate的運行原理和細節(jié)搞的特別清楚,好像Hibernate就像自己寫的代碼一樣,很清楚的知道,怎么寫程序可以讓Hibernate運行效率最高,最省內(nèi)存,程序出了錯誤,很清楚的知道是什么地方的問題,怎么解決。所以用Hibernate讓我特別放心,我能夠駕馭它,而不像那些過于復(fù)雜的軟件,本身框架就復(fù)雜的很,再加上不開源,出了問題也不知道怎么回事。

jsp技術(shù)為什么要學習Hibernate?,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 在线AV国产传媒18精品免费 | 亚洲国产在线午夜视频无 | 福利免费观看体检区 | 亚洲精品福利在线 | 色婷婷五月综合久久中文字幕 | 久久re亚洲在线视频 | 出租屋自拍贵在真实15P | 国产亚洲精品久久孕妇呦呦你懂 | 色偷偷亚洲天堂 | 人妻中文字幕无码久久AV爆 | 一起碰一起噜一起草视频 | 中文字幕一区二区三区在线观看 | 在线高清电影理论片4399 | 在线观看成人免费视频 | 日本污ww视频网站 | 精品国产乱码久久久久久下载 | 漂亮的保姆3中文版完整版 漂亮的保姆3集电影免费观看中文 | adc年龄确认大驾光临入口 | 大屁股国产白浆一二区 | yellow日本动漫免费观看 | 欧美wwwvideos在线观看 | 国产精品18久久久久久欧美网址 | 99精品日韩| 国产精品99久久免费黑人人妻 | 久久草香蕉频线观 | 精品日韩二区三区精品视频 | 双性精跪趴灌满h室友4p | 天天爽夜夜爽8888视频精品 | 伊人亚洲综合网色 | 强奷表妺好紧2 | 狂野猛交xxxx吃奶 | 好紧小嫩嫩水的10p 好紧好湿太硬了我太爽了小说 | 欧美日韩另类在线观看视频 | 嫩小性性性xxxxbbbb | 人妻满熟妇AV无码区国产 | 色综合五月激情综合色一区 | 午夜影视不用充钱的免费 | 亚洲欧美一区二区三区久久 | 亚洲综合无码一区二区 | 亚洲区视频在线观看 | 色综合色综合久久综合频道 |