NHibernate 是當前最流行的Java O/R mapping 框架Hibernate 的移植版本,當前版本是1.0 rc-1 。它出身于sf.net..IbatisNet 是另外一種優(yōu)秀的Java O/R mapping 框架,當前版本是1.2 。目前屬于apache的一個子項目了。
相對NHibernate “O/R ”而言,IbatisNet 是一種“Sql Mapping ”的ORM實現(xiàn)。
NHibernate 對數(shù)據(jù)庫結構提供了較為完整的封裝,NHibernate 的O/R Mapping 實現(xiàn)了PO 和數(shù)據(jù)庫表之間的映射,以及SQL 的自動生成和執(zhí)行。程序員往往只需定義好了PO 到數(shù)據(jù)庫表的映射關系,即可通過NHibernate 提供的方法完成持久層操作。程序員甚至不需要對SQL 的熟練掌握, NHibernate 會根據(jù)制定的存儲邏輯,自動生成對應的SQL 并調(diào)用ADO.NET接口加以執(zhí)行。
而IbatisNet 的著力點,則在于PO 與SQL 之間的映射關系。也就是說,IbatisNet 并不會為程序員在運行期自動生成SQL 執(zhí)行。具體的SQL 需要程序員編寫,然后通過映射配置文件,將SQL 所需的參數(shù),以及返回的結果字段映射到指定PO。
使用IbatisNet 提供的ORM 機制,對業(yè)務邏輯實現(xiàn)人員而言,面對的是純粹的DotNet 對象,這一層與通過NHibernate 實現(xiàn)ORM 而言基本一致,而對于具體的數(shù)據(jù)操作,NHibernate 會自動生成SQL 語句,而IbatisNet 則要求開發(fā)者編寫具體的SQL 語句。相對NHibernate 而言,IbatisNet 以SQL開發(fā)的工作量和數(shù)據(jù)庫移植性上的讓步,為系統(tǒng)設計提供了更大的自由空間。
二者的對比:
1 . IbatisNet 非常簡單易學,NHibernate 相對較復雜,門檻較高。
2 . 二者都是比較優(yōu)秀的開源產(chǎn)品
3 . 當系統(tǒng)屬于二次開發(fā), 無法對數(shù)據(jù)庫結構做到控制和修改, 那IbatisNet 的靈活性將比NHibernate 更適合
4 . 系統(tǒng)數(shù)據(jù)處理量巨大,性能要求極為苛刻,這往往意味著我們必須通過經(jīng)過高度優(yōu)化的SQL 語句(或存儲過程)才能達到系統(tǒng)性能設計指標。在這種情況下IbatisNet 會有更好的可控性和表現(xiàn)。
5 . IbatisNet 需要手寫sql 語句,也可以生成一部分,NHibernate 則基本上可以自動生成,偶爾會寫一些Hql 。同樣的需求,IbatisNet 的工作量比NHibernate 要大很多。類似的,如果涉及到數(shù)據(jù)庫字段的修改,NHibernate 修改的地方很少,而IbatisNet 要把那些sql mapping 的地方一一修改。
6 . 以數(shù)據(jù)庫字段一一對應映射得到的PO 和NHibernte 這種對象化映射得到的PO 是截然不同的,本質區(qū)別在于這種PO 是扁平化的,不像NHibernate 映射的PO 是可以表達立體的對象繼承,聚合等等關系的,這將會直接影響到你的整個軟件系統(tǒng)的設計思路。
7 . 最關鍵的一句話是IbatisNet 的作者說的:
If you are starting a new project and you‘re in full control of your object model and database design, NHibernate is a good choice of O/R tool.
If you are accessing any 3rd party databases (e.g. vendor supplied), or you‘re working with a legacy database, or even just a really poorly designed database, then an O/R mapper might not be capable of handling the situation. That‘s were an SQL Mapper comes in handy
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請
點擊舉報。