iBATIS特性之七大方面詳談

iBATIS特性有哪些呢?正如你所知道的,可以在任何系統中使用iBATIS。像iBATIS這樣一個框架能夠使你的應用從架構級別上開始受益是什麼原因呢?來開始我們的介紹吧。

iBATIS特性1簡單性

iBATIS被廣泛認爲是當今可用的最簡單的持久化框架之一。簡單性的理念根植於iBATIS開發團隊,它在iBATIS的所有開發目標中居於首位。這種簡單性的取得是因爲iBATIS直接構建於JDBC和SQL之上。iBATIS對於Java開發者來說非常簡單,因爲它除了不用編寫那麼多代碼外與JDBC的工作機制非常相像。幾乎你知道的關於JDBC的一切都對iBATIS同樣適用。你幾乎可以這樣認爲,iBATIS就是以XML的形式來描述的JDBC代碼。有人說,iBATIS擁有許多JDBC所沒有的架構級的優點,這些優點我們隨後就將討論。iBATIS對於數據庫管理員以及SQL程序員來說也非常容易理解。iBATIS配置文件幾乎人人都能讀懂,只要他有SQL編程的經驗。

iBATIS特性2生產效率

任何一個優秀的框架,其目的都是使得框架的使用者能夠獲得更高的生產效率。一般情況下,框架負責處理公共的任務,減少編寫那些像樣板一樣的重複代碼,以及解決複雜的架構級的問題。iBATIS在給開發人員帶來更高的開發效率方面做得非常成功。在意大利的Java用戶組(Java Users Group)所做的一個案例調查中(參見www.jugsardegna.org/vqwiki/jsp/Wiki?IBatisCaseStudy),Fabrizio Gianneschi發現iBATIS減少了持久層大約62%的代碼量。所以能減少如此之多的代碼量,究其原因是開發者再不需要編寫繁瑣的JDBC代碼了。SQL語句仍然是硬編碼的,不過就像你在本章之前所看到的,SQL不是問題——問題在於JDBC API,對於ADO.NET而言也是如此。

iBATIS特性3性能

性能這個話題無疑會引起框架開發者、框架使用者以及商業軟件開發商之間的一場激烈爭論。事實是,從一個較低的級別來看這個問題,無疑所有的框架都會帶來一定的性能損失。一般來說,如果你比較硬編碼的JDBC代碼和iBATIS代碼,做一個1,000,000次的for循環,你會發現JDBC在性能上的確有一些優勢。幸運的是,在現代應用開發中,以上這樣的for循環帶來的性能損失並不重要。真正重要的是,你如何從數據庫中獲取數據,何時獲取,獲取的頻率又是多少。例如,分頁查詢之所以能大大提高應用的性能就在於,它不會將可能成千上萬條的記錄從數據庫中一次取出。同樣地,使用像懶加載這樣的特性可以避免加載那些在當前情況下並不需要的數據。另一方面,如果你確定需要加載一份複雜的對象圖,涉及到來自多個表的大量數據,如果能僅用一條SQL語句就完成所有對象的加載顯然可以大大提高效率,iBATIS支持使用這樣的SQL語句。iBATIS支持許多性能優化措施,我們將在本章之後的章節中詳細討論。就目前而言,最重要的是要知道iBATIS總是能通過一種簡單的方式來配置和使用,其性能與JDBC相當,甚至更好。另一個需要重點考慮的問題就是,並不是所有的JDBC代碼都是編寫良好的。JDBC API非常複雜,編寫正確的代碼需要非常小心。不幸的是,大量的JDBC代碼都編寫得相當糟糕,因此從較低層次上看甚至還沒有iBATIS工作得好。

iBATIS特性4關注點分離

在典型的JDBC代碼中,在應用的各個層中都能找到與數據庫相關(例如獲取連接、遍歷結果集)的代碼,這並不稀奇。相信大家都見過甚至開發過這樣糟糕的應用——所有的邏輯都在一個JSP頁面中完成,連接數據庫、執行SQL語句,遍歷結果集,當然還有散落其間的HTML代碼。這樣的代碼簡直是一個噩夢。在第一章中我們已經討論了對應用分層的重要性。我們已經看到了如何從一個較高的角度對應用分層,以及持久層內部又是如何進一步分層的。iBATIS通過幫助管理所有這些持久化相關的資源來支持分層,這些資源包括數據庫連接(database connection)、prepared statement以及結果集(result set)。iBATIS提供了一組數據庫無關的接口以及API,使得應用的其它部分能夠通過使用這組接口和API保持與數據庫相關資源的獨立性。使用iBATIS,你的代碼總是在直接與嚴格的對象打交道,再也不用管那些隨意的結果集了。iBATIS實際上使得你難以違背對應用分層這樣的最佳實踐。

iBATIS特性5明確分工

一些數據庫管理員是如此熱愛他們的數據庫,以至於不願意讓任何其他人來爲數據庫編寫SQL。而有一些人又是如此擅長編寫SQL,以至於其他人都想讓他們來做這項工作。無論是什麼原因,在你的開發團隊中實現人盡其才總是有利的。如果你的團隊中有人尤其擅長於編寫SQL,但是對於Java或C#卻不那麼在行,那麼就可以讓他們專門編寫SQL。iBATIS使得這種分工成爲可能。因爲在iBATIS中,SQL語句在很大程度上同應用的源代碼是分離的,SQL程序員可以按照SQL原本的方式來編寫它,而不必擔心有關SQL字符串連接的問題。即使由相同的開發者來編寫Java代碼和SQL,在數據庫性能調整(performance tune)的過程中也會有一個來自DBA的常見請求,即“顯示出SQL”。用JDBC來完成此事並不容易,因爲SQL隱藏得很深,是連接一堆分散的字符串得到的,甚至還可能是在遞歸語句和條件語句中動態地創建的。如果使用對象關係映射,情況就更加複雜了,因爲你通常必須運行應用然後才能log出這些SQL語句,即使你找到了它們,你也根本不能改變它們。iBATIS則提供了充分的自由,使得任何人都可以開發、觀察並且修改在數據庫中執行的SQL語句。

iBATIS特性6可移植性

iBATIS是可移植的。由於它相對簡單的設計,它幾乎可以用任何一種語言在任何一個平臺上實現。書寫本書時,iBATIS支持3種最受歡迎的開發平臺:Java、Ruby和微軟.NET的C#。

當前,配置文件並不完全跨平臺兼容,但是我們正在計劃使它們更加兼容。重要的是,概念和方法都是可移植的。這就使你能夠保證你所有的應用在設計上是一致的。和其他框架相比,iBATIS可以處理更多語言以及更多類型的應用,而無需考慮應用設計的不同。如果應用的一致性對於你來說很重要的話,使用iBATIS就可以很好地幫你達到一致性。

iBATIS特性7開源和誠實

開始時我們說本節有“自吹自擂”之嫌。事實上,iBATIS是免費的開源軟件。無論你是否使用它,我們都不會因此而獲得哪怕是一分錢的利益。你已經買了本書,所以我們已經獲得了我們該得的利益。開源軟件的最大的優點之一就是誠實。我們沒有任何理由對你撒謊。因此下面我們將要做的事在商業軟件文檔中就是非常罕見的:我們將要討論一些你可能不應該使用iBATIS的情況,並且提出一些合適的替代方案。

iBATIS特性就向你介紹到這裏,希望通過這樣的講解使你更加清楚的認識iBATIS。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章