|
首先列出英雄榜
1.JDBC直接訪問數(shù)據(jù)庫(kù)
2.EJB entity bean.
3.JDO技術(shù)。
4.第三方O/R工具,如目前大紅大紫的Hibernate, 其它如Castor, Toplink.
先說說這個(gè)歷史最為悠久的JDBC吧。從Java誕生的那天起,這位仁兄就開始登上歷史舞臺(tái)了。Java能有今天這么風(fēng)光,JDBC可以說是功不可末。一路走來(lái),如今已是JDBC3.0了。在沒有JDBC的時(shí)候,訪問數(shù)據(jù)庫(kù)那是八仙過海,各顯神通,各家數(shù)據(jù)庫(kù)廠商都有自己的一套API, 苦就苦了開發(fā)人員了。換了個(gè)數(shù)據(jù)庫(kù),那個(gè)程序要改是面目全非。
JDBC規(guī)范的出臺(tái),向世界宣告從此有了訪問關(guān)系數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)通用接口了。JDBC標(biāo)準(zhǔn)獲得了幾乎所有數(shù)據(jù)庫(kù)廠商的支持,好像還真難找到這么一個(gè)數(shù)據(jù)庫(kù),它是沒有JDBC支持的。JDBC規(guī)范一經(jīng)發(fā)布,獲得了空前成功,很快成為Java訪問數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)。JDBC的成功在于它的規(guī)范統(tǒng)一標(biāo)準(zhǔn)的接口,只需要掌握標(biāo)準(zhǔn)的SQL語(yǔ)言就可以訪問各種不同的數(shù)據(jù)庫(kù)了。這種數(shù)據(jù)庫(kù)間的可移植性和Java一直高喊的口號(hào)Compile Once, Run everywhere遙相呼應(yīng)。JDBC今天還是Java訪問數(shù)據(jù)庫(kù)的基石,CMP、JDO、Hibernate說到底只是更好的封裝了JDBC, 提供了更為上層的更為強(qiáng)大的接口而已。然后說說JDBC直接訪問數(shù)據(jù)庫(kù)的方式來(lái)實(shí)現(xiàn)Java 持久性。
這種方式相對(duì)于CMP來(lái)說比較簡(jiǎn)單直接,特別是對(duì)于小型應(yīng)用十分方便。比如,我要寫一個(gè)簡(jiǎn)單的留言版程序,就沒有必要session bean ,entity bean ,又是home接口又是遠(yuǎn)程接口,一層層調(diào)了吧。直接JDBC,寫SQL語(yǔ)句了事。和其它持久化技術(shù)相比,JDBC直接訪問數(shù)據(jù)庫(kù)的方式需要程序員操心的事情多了一些,你得自己關(guān)心transaction, 自己關(guān)心連接池,你得寫大量的get set方法,把SQL select出來(lái)的值一個(gè)一個(gè)塞到你的Java object中,或者把Java object的值一個(gè)一個(gè)給取出來(lái),用SQL insert 到數(shù)據(jù)庫(kù),完全手動(dòng)進(jìn)行O/R mapping。為了克服這些缺點(diǎn),CMP, JDO等等開始陸續(xù)登上歷史舞臺(tái)。
下面EJB登場(chǎng),EJB作為Sun J2EE體系的核心部分,是Sun 所力推的企業(yè)級(jí)開發(fā)的首選,而EJB entity 目前仍然是Sun J2EE白皮書所最為推薦的Java持久化技術(shù)。Entity Bean作為EJB規(guī)范的一部分,也是EJB規(guī)范里面最備受爭(zhēng)議的一種技術(shù),它伴隨著EJB規(guī)范走過了風(fēng)風(fēng)雨雨幾個(gè)春秋。目前EJB3.0規(guī)范草案已經(jīng)出臺(tái),http://jcp.org/en/jsr/detail?id=220。
從家庭出生來(lái)看,EJB可謂是根正苗紅,規(guī)范處于 JCP管理之下,擁有超級(jí)豪華的專家組成員, Sun、IBM、Oracle、Borland、Bea、SAP、Jboss、Apache軟件基金組織等等。單從這一點(diǎn)來(lái)看,選它作為企業(yè)級(jí)開發(fā),技術(shù)支持應(yīng)該就無(wú)需擔(dān)心了。當(dāng)然向IBM, Bea等尋求項(xiàng)目咨詢價(jià)格當(dāng)然也不菲。從提供功能上來(lái)看,EJB entity經(jīng)歷了EJB1.0,EJB1.1,EJB2.0,功能也越來(lái)越完善了。包括了完善的事務(wù)支持,EJBQL查詢語(yǔ)言,透明的分布式訪問等等。不過作為一個(gè)重量級(jí)技術(shù),entity bean的性能不太盡人意,這成為它備受爭(zhēng)議的一個(gè)焦點(diǎn),不知在3.0以后這個(gè)狀況會(huì)不會(huì)有所改進(jìn)。
再有一個(gè),它功能雖然強(qiáng)大,可是對(duì)于易用性來(lái)說,實(shí)在不敢恭維,寫一個(gè)最簡(jiǎn)單的bean,也非得home接口,遠(yuǎn)程接口,要再加上2.0以后加入的本地接口,這么林林總總一大堆,足以讓Java初學(xué)者望而卻步了。但是這一點(diǎn)在一段時(shí)間內(nèi)竟然也成了EJB功能強(qiáng)大,技術(shù)高深的“佐證”。記得多年以前剛畢業(yè)那陣,EJB應(yīng)用在國(guó)內(nèi)還比較少,公司里也沒有人研究Why EJB這個(gè)問題,反正凡是用EJB的項(xiàng)目就是牛項(xiàng)目,用EJB的人就是牛人,分到EJB項(xiàng)目組的兄弟們走路都是抬頭挺胸的,說話都比我等還在JDBC, SQL的人要高兩嗓門。EJB 技術(shù)目前盤踞著企業(yè)級(jí)應(yīng)用的大部分江山,老大地位短時(shí)間內(nèi)很難捍動(dòng)。
下面新生代代表JDO隆重登場(chǎng),JDO絕對(duì)屬于超年輕選手, JDO1.0也不過是2002四月份才發(fā)布。2003五月份出臺(tái)1.0.1, 目前最新2.0草案已經(jīng)發(fā)布。就為這2.0,江湖上展開的討論可以說是“血雨腥風(fēng)”,兩大兵團(tuán),JDO兵團(tuán)和EJB兵團(tuán)爭(zhēng)得是不可開交。有興趣的不妨去瞧瞧,里面也不乏重量級(jí)人物。單從這一點(diǎn)來(lái)看,它能對(duì)EJB產(chǎn)生這么大的沖擊,足以說明了這個(gè)初生牛犢確有過人之處。JDO的誕生給Java數(shù)據(jù)持久性帶來(lái)很多新特性,特別是它彌補(bǔ)了EJB對(duì)OO編程的先天不足,JDO提供了完全的OO支持,繼承,多態(tài)。JDO和 EJB比屬于輕量級(jí)工具,無(wú)需容器支持。不像EJB,要用你就非得整一個(gè)Weblogic, webSphere之類的。
JDO的簡(jiǎn)單易用是最為人們所稱道的,不需要你寫大量無(wú)用的接口,不需要你繼承什么特殊的類,唯一所要做的就是對(duì)你的class文件做一下enhance。用了JDO,可以說我們的Java程序這下真正OO了,我們無(wú)需再理會(huì)數(shù)據(jù)庫(kù)里面有啥表格了,存取都是以Java object為對(duì)象了,所有數(shù)據(jù)庫(kù)表格都是自動(dòng)生成的。這一點(diǎn)可以說也是一個(gè)革命了。
在此之前,項(xiàng)目設(shè)計(jì)階段,Database Schema設(shè)計(jì)可以說是個(gè)重頭戲。而現(xiàn)在用JDO開發(fā),完全不需要數(shù)據(jù)庫(kù)設(shè)計(jì)了。那你的Database Schema呢?就是你的Class啊,JDO會(huì)根據(jù)你的Class自動(dòng)生成相應(yīng)的數(shù)據(jù)庫(kù)表格。一個(gè)字,爽!從數(shù)據(jù)庫(kù)可移植性來(lái)看,JDO也是優(yōu)勢(shì)明顯,就我使用過的Kodo 和 Genie來(lái)看,幾個(gè)簡(jiǎn)單應(yīng)用程序換數(shù)據(jù)庫(kù)時(shí)候除了換一個(gè)JDBC driver, 換一下數(shù)據(jù)庫(kù)URL,無(wú)需對(duì)程序做任何改動(dòng)。 這一點(diǎn)對(duì)EJB 來(lái)說又是處于劣勢(shì)。從家庭出身來(lái)看,JDO也是出生名門,從一開始就處于JCP管理之下。從企業(yè)級(jí)支持來(lái)看,它可以很好的和Session bean協(xié)同工作,對(duì)于企業(yè)級(jí)開發(fā),Session bean + JDO的方式是Session bean+entity方式的一個(gè)強(qiáng)有力競(jìng)爭(zhēng)對(duì)手。雖然有這么多優(yōu)點(diǎn),不過它的發(fā)展之路也非一帆風(fēng)順,這不,今年五月份JDO2.0的投票,IBM、Oracle、Bea三大巨頭同時(shí)投了反對(duì)票。不過稍微一想,就可以理解,這并不是JDO本身技術(shù)有什么重大缺陷,而是JDO動(dòng)到這些巨頭們的奶酪了。
Bea、IBM做著業(yè)界最為著名應(yīng)用服務(wù)器,weblogic和WebSphere,在EJB上面是投下了血本了,他們不能眼睜睜看著JDO來(lái)蠶食EJB市場(chǎng)。而Oracle, 還在賣著它自己的O/R工具Toplink, 看著JDO日漸強(qiáng)大,他能不著急么。不過呢,公司再牛,他也擋不住歷史前進(jìn)的車輪吧,最終JDO2.0的投票還是以絕對(duì)的票數(shù)(12:3)通過了。
還有其它散落江湖的Java持久化技術(shù),如Hibernate、Castor、Toplink,他們雖然沒有皇家血統(tǒng),不過實(shí)力也是不容小視。就拿Hibernate來(lái)說,是Javaworld評(píng)選出來(lái)的2003年度最佳Java數(shù)據(jù)存取工具,目前可以說是大紅大紫。而Castor和Toplink也算是歷史悠久了,在JDO沒有出世之前,它們就在江湖上混著了。目前也占據(jù)著一定的市場(chǎng)。這些第三方的工具從功能上來(lái)說很類似于JDO, 只是各自的API互不相同。這也是后來(lái)JDO規(guī)范的呼聲越來(lái)越高的一個(gè)原因吧。這些第三方O/R mapping工具能在江湖上立足,也確實(shí)都有各自過人之處。如Hibernate金字招牌就是Open Source,支持幾乎世面上所能看到得絕大部分?jǐn)?shù)據(jù)庫(kù),并且文檔也非常齊全。Toplink么,可謂歷史悠久,又榜著Oracle這棵大樹。目前來(lái)看,這些工具也占據(jù)著Java數(shù)據(jù)庫(kù)存取的不小市場(chǎng)。個(gè)人覺得,隨著JDO規(guī)范的不段完善,JDO產(chǎn)品的普及,這一部分人員可能會(huì)在以后漸漸退出歷史舞臺(tái)。不過從Hibernate目前如日中天的氣勢(shì)來(lái)看,好像說這句話還為時(shí)過早。
關(guān)于這些技術(shù)優(yōu)劣之爭(zhēng)從它們剛剛出生那天起從來(lái)就沒有停止過,而各家各派也從來(lái)沒有能夠說服過對(duì)方。對(duì)于我們應(yīng)用開發(fā)者而言,撇開應(yīng)用純粹來(lái)爭(zhēng)論技術(shù)優(yōu)劣并沒有多大意義。還是俗話說的好,沒有最好的,只有最合適的。我們能夠在做開發(fā)的時(shí)候能夠選擇一個(gè)最合適于自己應(yīng)用的技術(shù),那就足夠了。總的來(lái)說,JDBC面向RDBMS,比較適合關(guān)系數(shù)據(jù)庫(kù)模式驅(qū)動(dòng)的應(yīng)用,例如統(tǒng)計(jì)表格數(shù)據(jù),生成報(bào)表之類的應(yīng)用。EJB 技術(shù)以J2EE應(yīng)用服務(wù)器為中心,如果你的應(yīng)用確實(shí)需要靈活的可聲明的事務(wù)邊界,需要支持大容量的訪問和不間斷的服務(wù),需要應(yīng)用服務(wù)器的集群,那么選EJB吧。JDO則面向?qū)ο螅瑢?duì)于以域?qū)ο鬄橹行牡?a href=/pingce/yingyong/ target=_blank class=infotextkey>應(yīng)用,包含圖,樹模型的應(yīng)用,JDO是首選。
jsp技術(shù):Java數(shù)據(jù)庫(kù)存取技術(shù),轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。