NHibernate 是當前最流行的Java O/R mapping 框架Hibernate 的移植版本,當前版本是1.0 rc-1 。它出身于sf.net..IbatisNet 是另外一種優(yōu)秀的Java O/R mapping 框架,當前版本是1.2 。目前屬于apache的一個(gè)子項目了。
相對NHibernate “O/R ”而言,IbatisNet 是一種“Sql Mapping ”的ORM實(shí)現。
NHibernate 對數據庫結構提供了較為完整的封裝,NHibernate 的O/R Mapping 實(shí)現了PO 和數據庫表之間的映射,以及SQL 的自動(dòng)生成和執行。程序員往往只需定義好了PO 到數據庫表的映射關(guān)系,即可通過(guò)NHibernate 提供的方法完成持久層操作。程序員甚至不需要對SQL 的熟練掌握, NHibernate 會(huì )根據制定的存儲邏輯,自動(dòng)生成對應的SQL 并調用ADO.NET接口加以執行。
而IbatisNet 的著(zhù)力點(diǎn),則在于PO 與SQL 之間的映射關(guān)系。也就是說(shuō),IbatisNet 并不會(huì )為程序員在運行期自動(dòng)生成SQL 執行。具體的SQL 需要程序員編寫(xiě),然后通過(guò)映射配置文件,將SQL 所需的參數,以及返回的結果字段映射到指定PO。
使用IbatisNet 提供的ORM 機制,對業(yè)務(wù)邏輯實(shí)現人員而言,面對的是純粹的DotNet 對象,這一層與通過(guò)NHibernate 實(shí)現ORM 而言基本一致,而對于具體的數據操作,NHibernate 會(huì )自動(dòng)生成SQL 語(yǔ)句,而IbatisNet 則要求開(kāi)發(fā)者編寫(xiě)具體的SQL 語(yǔ)句。相對NHibernate 而言,IbatisNet 以SQL開(kāi)發(fā)的工作量和數據庫移植性上的讓步,為系統設計提供了更大的自由空間。
二者的對比:
1 . IbatisNet 非常簡(jiǎn)單易學(xué),NHibernate 相對較復雜,門(mén)檻較高。
2 . 二者都是比較優(yōu)秀的開(kāi)源產(chǎn)品
3 . 當系統屬于二次開(kāi)發(fā), 無(wú)法對數據庫結構做到控制和修改, 那IbatisNet 的靈活性將比NHibernate 更適合
4 . 系統數據處理量巨大,性能要求極為苛刻,這往往意味著(zhù)我們必須通過(guò)經(jīng)過(guò)高度優(yōu)化的SQL 語(yǔ)句(或存儲過(guò)程)才能達到系統性能設計指標。在這種情況下IbatisNet 會(huì )有更好的可控性和表現。
5 . IbatisNet 需要手寫(xiě)sql 語(yǔ)句,也可以生成一部分,NHibernate 則基本上可以自動(dòng)生成,偶爾會(huì )寫(xiě)一些Hql 。同樣的需求,IbatisNet 的工作量比NHibernate 要大很多。類(lèi)似的,如果涉及到數據庫字段的修改,NHibernate 修改的地方很少,而IbatisNet 要把那些sql mapping 的地方一一修改。
6 . 以數據庫字段一一對應映射得到的PO 和NHibernte 這種對象化映射得到的PO 是截然不同的,本質(zhì)區別在于這種PO 是扁平化的,不像NHibernate 映射的PO 是可以表達立體的對象繼承,聚合等等關(guān)系的,這將會(huì )直接影響到你的整個(gè)軟件系統的設計思路。
7 . 最關(guān)鍵的一句話(huà)是IbatisNet 的作者說(shuō)的:
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
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。