久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

使用hibernate的優(yōu)勢

 hehffyy 2014-04-30
1、  開發(fā)者都知道,,hibernate讓我們以oo的方式操作數(shù)據(jù)庫,,這讓我們看到了hibernate的強(qiáng)大之處,體驗到操作數(shù)據(jù)的方便,。但Gavin King說,,hibernate最耀眼之處是hibernate的緩存機(jī)制,而不是以oo的方式操作數(shù)據(jù)庫,。Hibernate的緩存機(jī)制不外乎是一級緩存session,,二級緩存sessionFactory,和第三方緩存如ehcache,。也就是hibernate的最強(qiáng)大的地方是它的緩存,,理解了這個才能真正的理解hibernate。緩存實在太難了,,我至今未能真正理解,。

2、  可維護(hù)性:ibatis宣揚寫sql語句,,它將sql語句放進(jìn)一個單獨的xml文件,,這種方式贏得了很多開發(fā)者的喜愛,一句話,,方便維護(hù),。但hibernate同樣具有這種功能,而且比ibatis更加強(qiáng)大,。Hibernate的命名查詢/命名參數(shù)查詢,,就是將hql語句放在一個單獨的xml文件之中,它仍然讓人們以面向?qū)ο蟮姆绞饺ゲ倏v數(shù)據(jù),,這得到大量遵循oo方式開發(fā)者的喜愛,,而不用在以oo的方式寫著代碼的同時,,然后再轉(zhuǎn)變思維,用面向關(guān)系的方式去寫那些sql語句,。但hibernate不僅做了這些,,它的native sql查詢方式,完全滿足sql語句的偏愛者,,它像ibatis一樣,,將sql語句放在配置文件之中。

3,、  性能:我堅信,,hibernate性能問題不是問題。想想那么多大中小項目都在使用hibernate,,你還懷疑hibernate的性能嗎,?spring整合hibernate之后,在真正性能瓶頸的地方,,完全可以使用spring集成的jdbc,,或直接寫存儲過程得了。但首先得確認(rèn),,這實在是性能瓶頸的地方,,我想,不應(yīng)想當(dāng)然的認(rèn)為性能的問題,,所謂的性能問題阻撓了很多人,。

我認(rèn)為,性能的好壞無外是發(fā)送sql語句的多少而已,。性能好,,發(fā)送的sql語句少,性能差,,就是發(fā)送大量的sql語句,。Hibernate在解決性能問題方面做得非常好。

有了它的緩存機(jī)制,,使用第三方緩存和數(shù)據(jù)庫連接池,,就較好的解決的性能問題。

但這些還不夠,,hibernate給了開發(fā)者足夠的自由,,讓開發(fā)者自己去控制性能問題。

我認(rèn)為開發(fā)者可以在以下幾個方面自行調(diào)優(yōu):

a,、  在查詢字符串中,,應(yīng)該總是使用jdbc的占位符?,或使用使用命名參數(shù):,,不要自查詢中使用字符串值來代替非常量值,。

b、  Flush會影響性能,,頻繁刷新影響性能,,盡量減少不必要的刷新。

c,、  Cascade策略,,在幾對幾的關(guān)系,正確設(shè)置cascade策略,,想清楚在操作對象A的同時是否需要級聯(lián)操作對象B,,比如在one to many的父子關(guān)系中,刪除了父親one,,需級聯(lián)刪除子many,這時的one這端可設(shè)置cascade = “delete”,,這樣在刪除one時,,會自動刪除子,但對子的操作不會影響父,。Cascade還有其他的屬性值,,只要設(shè)置正確,可提升性能,。

d,、  lazy策略,正確設(shè)置延遲加載策略同樣會提升性能,,在one to many或many to many中,,通常總應(yīng)該延遲加載many的一方的到內(nèi)存,。設(shè)置了lazy = “true”,,首先發(fā)送sql語句,加載自己到內(nèi)存,,到需要時才加載級聯(lián)對象,;lazy=”false”,則會同時加載自己和級聯(lián)對象到內(nèi)存。

e,、  另外還有集合的性能(set,、list、map,、array),,都應(yīng)正確設(shè)置。

f、正確使用第三方緩存,,在讀操作頻繁寫操作不多的情況,,使用第三方緩存可大幅度提升性能,如ehcache的緩存策略有:read-only,,read-write和notstrict-read-write,。

f、   隨著hibernate新版本的發(fā)布,,和技術(shù)的發(fā)展,,我相信hibernate的性能會越來越好,所有性能不是不使用hibernate的原因,。

4,、  hibernate不僅僅作為持久層的orm框架存在,它除了dao層的持久化操作外,,還有很多,。

在注解annotation已經(jīng)走向主流的今天,hibernate 迅速響應(yīng),,讓xml部署描述符成為可選的,。Hibernate annotation 對大字段的處理只是一個@Lob就搞定了。

hibernate search對Lucene進(jìn)行了輕量級的封裝,,全文檢索變得非常簡單,。

Hibernate validator被認(rèn)為是最合理的驗證方式,將驗證策略直接附在貫穿各層的領(lǐng)域模型domain上,,不再需要哪些web框架的xml方式的驗證,,代碼中不再出現(xiàn)大量的非空/null的判斷。

5,、  jbpm,, Jbpm業(yè)務(wù)流程引擎的持久層采用hibenrnate來實現(xiàn),要想使用jbpm,,hibernate是必須的,。我想,業(yè)務(wù)流程管理無比重要,,在soa迅速發(fā)展的今天,,如果實施soa項目,業(yè)務(wù)流程管理是必然和必須的,。因為soa就是業(yè)務(wù)和it技術(shù)的融合,,是業(yè)務(wù)流程管理和it基礎(chǔ)架構(gòu)的融合。在soa中,,業(yè)務(wù)管理是第一位的,,這需要相應(yīng)的技術(shù)來實現(xiàn)該業(yè)務(wù)流程管理,。開源領(lǐng)域的jbpm我想會是首選。所以,,為了將來有可能實施soa項目,,為了實現(xiàn)soa的業(yè)務(wù)流程管理,應(yīng)該使用hibernate,。

6,、  大家都知道,hibernate將ejb2時代的實體bean趕進(jìn)了歷史,,而ejb3的jpa標(biāo)準(zhǔn)也只不過是hibernate的子集而已,。jsr規(guī)范請求的威力是巨大的,沒有各種jsr規(guī)范請求,,就不會有各種應(yīng)用程序框架,,各種應(yīng)用程序框架只是那些jsr規(guī)范請求的實現(xiàn)者。jpa作為持久層的規(guī)范標(biāo)準(zhǔn),,引導(dǎo)持久層orm框架的方向,,jpa同樣以面向?qū)ο蟮姆绞讲僮鲾?shù)據(jù)庫,而不是寫sql語句,。規(guī)范標(biāo)準(zhǔn)都完全orm,,不寫sql了,你還有理由不跟著它嗎,?

7、  Spring+hibernate+范型+可變參數(shù),,這是一個非常強(qiáng)大的組合,,對應(yīng)普通的crud操作,你不再需要重復(fù)寫那些煩人的相似的dao層和manager層的代碼,,僅僅需要寫一次,,就完成了所有大量的crud操作。Ibatis盡管也支持范型,,但始終沒有hibernate支持的好

8,、  Jboss,hibernate是jboss的項目,,jboss的所有項目的持久層都采用的hibernate,,要知道,jsr規(guī)范組的專家們大多數(shù)是來自jboss的,,在一定程度上說,,jboo引領(lǐng)著java的發(fā)展方向。使用hibernate,,跟著jboss,,不偏離java的發(fā)展方向。

9、  Gavin King,,我最崇拜的偶像,,他不僅發(fā)明了強(qiáng)大的hibernate,還搞出了同樣強(qiáng)大且優(yōu)雅的web2.0應(yīng)用程序框架seam,。他是ejb3.0專家組成員之一,,是jpa規(guī)范請求的領(lǐng)導(dǎo)者,他java領(lǐng)域最有發(fā)言權(quán),、最權(quán)威的領(lǐng)袖人物之一?,F(xiàn)在,他領(lǐng)導(dǎo)web bean的,,jsr299的發(fā)展,,web bean規(guī)范的制定,全球軟件巨頭如ibm,、oracle,、bea和apache沒有一個反對,紛紛響應(yīng),。Web bean,,想象起來,實在太美好了,,完全的松耦合和強(qiáng)類型,,所有的應(yīng)用組件生活在一個應(yīng)用組件上下文context中,相互合作,。那時將不再有各種各樣的上下文環(huán)境,,不再有struts2的ActionContext,不再有spring的ApplicationContext,,不再有hibernate的session,,不再有持久化上下文,不再有事務(wù)上下文,,不再有安全上下文,,所有組件生活在一個大家庭中,大家其樂融融,,實現(xiàn)天下的大和平,。

10、   osgi,,我認(rèn)為現(xiàn)在最值得學(xué)習(xí)的一個技術(shù),,有了osgi,實現(xiàn)真正的多模塊開發(fā),,改變傳統(tǒng)的開發(fā)方式?,F(xiàn)在,,已經(jīng)有了hibernate osgi,spring dynamic modul(osgi),struts 2 同樣實現(xiàn)了對osgi的支持,。目前,,eclipse是基于osgi開發(fā)的,ibm的websphere v6.1,,bea的所有產(chǎn)品都重構(gòu)在osgi上,,spring的應(yīng)用服務(wù)器同樣基于osgi,在EclipseCon2007上,,osgi成為了主要的話題,。Osgi受到如此的待遇,一點不奇怪,,因為他具有無比強(qiáng)大的功能,,改變傳統(tǒng)的軟件開發(fā)方式。Osgi采用樹設(shè)計模式,,將一個項目分成多個模塊(bundle),,每個模塊單獨部署,單獨運行,,說白了,,就是將一個工程分成許多的插件,每個插件單獨開發(fā),,重復(fù)使用,,實現(xiàn)完全的即插即用。太令人激動了,。如果公司的軟件開發(fā)基于osgi,,將會有大量的重復(fù)使用的osgi bundles,公司將會積累大量的無形資產(chǎn),,軟件開發(fā)將會越來越快,。而ibatis現(xiàn)在還沒見到對osgi的支持,。

11,、hibernate的社區(qū)非常繁榮,ibatis則相對平靜,。  

綜述,,hibernate還有很多優(yōu)秀的特點,只是我們不知道,。Hibernate與ibatis,,就像大家閨秀對小家碧玉,大家閨秀不僅具有小家碧玉的全部,,而且知名度更高,,更受尊敬,,更受人追捧,更有發(fā)展前途,。小家碧玉盡管也很有魅力,,但始終比上大家閨秀。

Hibernate所做的不僅僅是dao層的持久化工作,,而ibatis恰恰如此,。


2.2.1 struts2簡介
Struts2是由WebWork基礎(chǔ)上發(fā)展起來的,與struts1比較,,選用struts2的理由是:①Struts1要求Action類繼承一個抽象基類,,而Struts 2 Action類可以實現(xiàn)一個Action接口,也可實現(xiàn)其他接口,,使可選和定制的服務(wù)成為可能,。Struts2提供一個ActionSupport基類去實現(xiàn)常用的接口;②Struts1 Action 依賴于Servlet API而Struts 2 Action不依賴于容器,,允許Action脫離容器單獨被測試,;③Struts1支持每一個模塊有單獨的Request Processors(生命周期),但是模塊中的所有Action必須共享相同的生命周期,,而Struts2支持通過攔截器堆棧(Interceptor Stacks)為每一個Action創(chuàng)建不同的生命周期,。堆棧能夠根據(jù)需要和不同的Action一起使用。④struts同時支持配置國際化,,讓不同語言轉(zhuǎn)換變得簡單,。
2.2.2 spring 簡介
Spring是一個開源框架。它是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的,。本項目中使用spring主要是使用其IOC容器(即“控制反轉(zhuǎn)”)來達(dá)到松耦合,。在事務(wù)的處理上,我們也使用了SPRING來裝配代理設(shè)置,。SPRING還帶來了AOP的編程支持,,面向切面編程允許通過分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級服務(wù)(例如事務(wù)(transaction)管理)進(jìn)行內(nèi)聚性的開發(fā)。應(yīng)用對象只實現(xiàn)它們應(yīng)該做的“完成業(yè)務(wù)邏輯”僅此而已,。它們并不負(fù)責(zé)其它的系統(tǒng)級關(guān)注點,,例如日志或事務(wù)支持。本項目中使用AOP的org.springframework.aop.framework.autoproxy自動創(chuàng)建代理來完成事務(wù)的代理,。
2.2.3 hibernate簡介
Hibernate是一個開放源代碼的對象關(guān)系映射框架,,它對JDBC進(jìn)行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫,。完成數(shù)據(jù)持久化的重任,。在本項目中因為使用了hibernate持久化技術(shù),故使用hibernateTransactionManager來完成事務(wù)管理,。
2.2.4 S2SH集成框架簡介
struts 負(fù)責(zé) web 層ActionFormBean 接收網(wǎng)頁中表單提交的數(shù)據(jù),,然后通過 Action 進(jìn)行處理,,再 Forward 到對應(yīng)的網(wǎng)頁。
spring 負(fù)責(zé)業(yè)務(wù)層管理,,即 Service (或 Manager). service 為 action 提供統(tǒng)計的調(diào)用接口,,封裝持久層的 DAO。同時可以寫一些自己的業(yè)務(wù)方法,。Spring負(fù)責(zé)統(tǒng)一 javabean 管理方法和聲明式事務(wù)管理,,最后spring來集成 Hiberante 。
Hiberante ,,負(fù)責(zé)持久化層,,完成數(shù)據(jù)庫的 crud 操作,hibernate 為持久層,,提供 OR/Mapping ,。 它有一組 .hbm.xml 文件和 POJO, 是跟數(shù)據(jù)庫中的表相對應(yīng)的。然后定義 DAO ,,這些是跟數(shù)據(jù)庫打交道的類,,它們會使用 PO 。
在 struts+spring+hibernate 的系統(tǒng)中,,對象的調(diào)用流程是: jsp-> Action - > Service ->DAO ->Hibernate ,。 數(shù)據(jù)的流向是 ActionFormBean 接受用戶的數(shù)據(jù), Action 將數(shù)據(jù)從 ActionFromBean 中取出,,封裝成 PO,再調(diào)用業(yè)務(wù)層的 Bean 類,,完成各種業(yè)務(wù)處理后再 forward 。而業(yè)務(wù)層 Bean 收到這個 PO 對象之后,,會調(diào)用 DAO 接口方法,,進(jìn)行持久化操作。

Spring的優(yōu)勢
1. 提供了一種管理對象的方法,,可以把中間層對象有效地組織起來,。一個完美的框架“黏合劑”。

  2. 采用了分層結(jié)構(gòu),,可以增量引入到項目中,。

  3. 有利于面向接口編程習(xí)慣的養(yǎng)成。

  4. 目的之一是為了寫出易于測試的代碼,。

  5. 非侵入性,,應(yīng)用程序?qū)pring API的依賴可以減至最小限度,。

   6. 一致的數(shù)據(jù)訪問介面,。

  6. 一個輕量級的架構(gòu)解決方案。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多