iBATIS不適合使用的四種情況淺析
iBATIS是一個(gè)中層的框架。它比JDBC更高層一些,但是相對(duì)于對(duì)象/關(guān)系映射工具,又要更底層一些。這使得iBATIS處于一個(gè)很獨(dú)特的位置上,使它能夠適用于一些較為特別的應(yīng)用。在本書前面的部分,我們討論了為什么iBATIS對(duì)于多種應(yīng)用類型都是有用的,包括小的桌面應(yīng)用,和較大的、企業(yè)級(jí)的Web應(yīng)用——以及任何介于這兩者之間的應(yīng)用類型。那么,iBATIS不適用的場(chǎng)合是什么呢?下面幾節(jié)就將詳細(xì)描述不適合使用iBATIS的各種情況,并且給出有關(guān)替代方案的建議。
iBATIS不適合使用之1當(dāng)你能永遠(yuǎn)擁有完全控制權(quán)時(shí)
如果你能夠保證擁有對(duì)應(yīng)用設(shè)計(jì)和數(shù)據(jù)庫(kù)設(shè)計(jì)的完全控制權(quán),那你一定是一個(gè)非常幸運(yùn)的人。這在商業(yè)環(huán)境或者任何一個(gè)核心工作不是軟件開發(fā)的行業(yè)中都是非常少見的。然而,如果你在一個(gè)軟件公司工作,并且在開發(fā)一個(gè)你擁有完全設(shè)計(jì)控制權(quán)的且由你發(fā)售的產(chǎn)品時(shí),那么你可能恰好處于這種情況。
當(dāng)你具有完全控制權(quán)時(shí),就有充分理由使用一個(gè)完全的對(duì)象/關(guān)系映射方案,如Hibernate。你可以充分利用對(duì)象/關(guān)系映射工具所能提供的設(shè)計(jì)優(yōu)勢(shì)并提高生產(chǎn)率。可能根本沒(méi)有來(lái)自企業(yè)數(shù)據(jù)庫(kù)組的干擾,也不需要與遺留系統(tǒng)整合。此外,數(shù)據(jù)庫(kù)可能是與應(yīng)用一同部署的,這使得它屬于應(yīng)用數(shù)據(jù)庫(kù)的范疇(參見第1章)。使用Hibernate的應(yīng)用的一個(gè)很好的例子就是,Atlassian的JIRA。它們提供了一個(gè)問(wèn)題跟蹤軟件,作為一個(gè)他們可以完全控制的發(fā)布產(chǎn)品。
然而,還需要考慮應(yīng)用未來(lái)的發(fā)展。如果數(shù)據(jù)庫(kù)有可能超出應(yīng)用開發(fā)者的控制,那么你就必須仔細(xì)考慮一下使用對(duì)象/關(guān)系映射將對(duì)你的持續(xù)化策略帶來(lái)怎樣的影響。
iBATIS不適合使用之2當(dāng)你的應(yīng)用需要完全動(dòng)態(tài)的SQL時(shí)
如果你的應(yīng)用的核心功能是動(dòng)態(tài)生成SQL,那么iBATIS就是錯(cuò)誤的選擇。iBATIS支持非常強(qiáng)大的動(dòng)態(tài)SQL特性,這些特性又反過(guò)來(lái)支持高級(jí)查詢能力,甚至一些動(dòng)態(tài)更新功能。然而,如果你的系統(tǒng)中每個(gè)語(yǔ)句都是動(dòng)態(tài)地生成的,那么你***使用原始的JDBC,甚至可以創(chuàng)建你自己的框架。
iBATIS的強(qiáng)大功能之一就是它允許你擁有完全的自由,可以手工編寫和直接操作SQL。當(dāng)應(yīng)用中大部分的SQL都是從某些SQL生成類動(dòng)態(tài)地生成時(shí),這種優(yōu)勢(shì)就會(huì)很快喪失。
iBATIS不適合使用之3當(dāng)你并沒(méi)有使用關(guān)系數(shù)據(jù)庫(kù)時(shí)
對(duì)于關(guān)系數(shù)據(jù)庫(kù)之外的其他數(shù)據(jù)庫(kù),也存在可用的JDBC驅(qū)動(dòng)。對(duì)于平板文件,微軟Excel電子數(shù)據(jù)表,XML,以及其他類型的數(shù)據(jù)存儲(chǔ)平臺(tái),都有相應(yīng)的JDBC驅(qū)動(dòng)。雖然一些人在iBATIS中使用這些驅(qū)動(dòng)也獲得了成功,但是對(duì)于大多數(shù)用戶我們并不推薦使用這些驅(qū)動(dòng)。
iBATIS并不會(huì)對(duì)你的環(huán)境做出任何假設(shè)。但是它確實(shí)期望你使用的是真正的關(guān)系數(shù)據(jù)庫(kù),即支持事務(wù)、相對(duì)典型的SQL、和存儲(chǔ)過(guò)程這些語(yǔ)義的關(guān)系數(shù)據(jù)庫(kù)。即使一些非常著名的數(shù)據(jù)庫(kù)也可能不支持關(guān)系數(shù)據(jù)庫(kù)的某些重要特性。如MySQL的早期版本就不支持事務(wù),因此iBATIS不能很好地處理MySQL。幸運(yùn)的是,當(dāng)前的MySQL已支持事務(wù)并且還有一個(gè)非常符合規(guī)范的JDBC驅(qū)動(dòng)。
如果你使用的不是真正的關(guān)系數(shù)據(jù)庫(kù),我們推薦你***使用原始的JDBC,甚至更底層的文件I/O API。
iBATIS不適合使用之4當(dāng)iBATIS不起作用時(shí)
隨著社區(qū)提出的需求越來(lái)越多,iBATIS也不斷地實(shí)現(xiàn)了許多非常好的特性。然而,iBATIS是有其自己的發(fā)展方向和設(shè)計(jì)目標(biāo)的,這樣一來(lái)它有時(shí)候就有可能會(huì)同一些應(yīng)用的需求發(fā)生沖突。人們?cè)谲浖椭驴梢酝瓿珊芏嗌衿娴氖虑椋怯袝r(shí)候由于需求過(guò)于復(fù)雜,軟件可能會(huì)完全不起作用,iBATIS也是如此。雖然我們也可以在iBATIS中添加特性以支持這些復(fù)雜的需求,但是這么做可能會(huì)極大地提高復(fù)雜性,甚至可能會(huì)改變iBATIS框架的適用范圍。因此,我們不會(huì)修改框架。為了解決以上問(wèn)題,我們將提供可擴(kuò)展的接口,這樣你就可以擴(kuò)展iBATIS以滿足幾乎任何需求。事實(shí)上,有時(shí)候iBATIS就是不起作用。此時(shí),***另尋一個(gè)更好的解決方案,而不是“霸王硬上弓”地將iBATIS(或者其他任何框架)用在不合適的地方。
iBATIS不適合使用的時(shí)期就向你介紹到這里,那么通過(guò)介紹你是不是對(duì)iBATIS不適合使用的時(shí)期有點(diǎn)自己的認(rèn)識(shí)呢?
【編輯推薦】