主要內容:
1.ORM的概念
2.為什麽要使用ORM
3.ORM的優缺點
4..Net中有那些ORM產品
5.總結
一、ORM的概念
ORM,即Object-Relational Mapping(對象關係映射),它的作用是在關係數據庫和業務實體對象之間作一個映射,這樣,我們在具體的操作業務對象的時候,就不需要再去和複雜的SQL語句打交道,只需簡單的操作對象的屬性和方法。
二、為什麽要使用ORM
2.1操作數據庫代碼的重複性
在ORM之前我們知道通過ADO.NET可以訪問數據庫。或者更進一步,學過三層架構的開發人員,知道可以將通過ADO.NET對數據庫的操作提取到一個單獨的類SqlHelper中,然后在DAL層調用SqlHelper類的方法實現對數據庫的操作。即使你這樣做了,在數據訪問層(DAL)層,還是要寫大量的代碼,而且我們都知道對數據庫的訪問無非增、刪、改、查四種操作,那么我們很容易想到我們做了大量的重復性工作。只是因為操作的表不同,我們可能需要花費大量的時間編寫針對該表的增刪改查語句,那么有沒有一種方式能自動生成這些語句呢?這樣的話,我們就可以吧主要的精力或者更多的時間投入到特殊業務的處理上。
2.2 大量SQL語句影響程序的擴展性和靈活性
我們知道之前我們編寫的程序和數據庫之間的耦合性很緊密,如果我們操作的是SQL Server數據庫,我們就需要引入對應的類庫(SqlConnection等),這樣如果需要更換數據庫,那么,數據訪問層的代碼就需要重新書寫。
在數據庫中表現為關系數據,而在內存中表現為對象。應用程序處理對象很容易,但是很難處理關系數據。ORM做到了關系數據和對象數據之間的映射,ORM可以通過映射關系自動產生SQL語句,ORM在業務邏輯層和數據層之間充當橋梁。
ORM核心原則:
1、簡單性
2、傳達性
3、精確性
三、ORM的優缺點
3.1優點
1、 隱藏了數據訪問細節,“封閉”的通用數據庫交互,ORM的核心。他使得我們的通用數據交互變得簡單易行,並且完全不用考慮該死的SQL語句。快速開發,由此而來。
2、ORM使用我們構造固化數據結構變得簡單易行。
3、ORM可以防止SQL的注入
4、面向對象 不用編碼,就可以向操作對象一樣操作數據庫
5、提高開發效率 ORM可以自動對實體對象與數據庫中表進行字段與屬性的映射,不需要單獨的數據訪問層就可以數據進行增刪改查。
6、方便轉移數據庫 當數據庫發生改變時,不需要對模型進行改動,只需要修改映射關係就可以了。
在ORM年表的史前時代,我們需要將我們的對象模型轉化為一條條的SQL語句,通過直連或是DB helper在關係數據庫構造我們的數據庫體系。而現在,基本上所有的ORM框架都提供了通過對象模型關係數據庫結構的功能
3.2 缺點
1、無可避免的,自動化意味著映射和關聯管理,代價是犧牲性能(早期,這是所有不喜歡ORM人的共同點)。現在的各種ORM框架都在嘗試使用各種方法來減輕這塊,效果還是很顯著的。
2、面向對象的查詢語言作為一種數據庫與對象之間的過渡,雖然隱藏了數據層面的業務抽象,但並不能完全的屏蔽掉數據庫層的設計,並且無疑將半圓學習成本
3、對於複雜查詢,ORM仍然力不從心。雖然可以實現,但是不值的。視圖和存儲可以解決大部問題
四、Net中有那些ORM產品
NHibernate、NBear、Castle ActiveRecord、iBATIS.NET、DAAB、EF(Entity Framework)等等
1、NHibernate
提起NHibernate,相信大家都不陌生,NHibernate來源於非常優秀的基於Java的Hibernate關係型持久化工具,它從數據庫底層來持久化.Net對象到關係型數據庫,NHibernate為我們完成這一切,而不用自己寫SQL語句去操作對象,所寫的代碼僅僅和對象關聯,NHibernate自動產生SQL語句,並確保對象提交到正確的表和字段中去。大量減少開發時人工使用SQL和ADO.NET處理數據的時間。NHibernate可以幫助消除或者包裝那些針對特定數據庫的SQL代碼,並且把結果集從表格的表示形式轉換到一系列的對象去。NHibernate採用XML文件配置的方式,每一個實體類都會對應一個映射文件。學習資料可參考
李永京的博客
http://www.cnblogs.com/lyj/archive/2008/10/30/1323099.html
DDL的博客
http://www.cnblogs.com/renrenqq/category/39891.html
大名鼎鼎的張老三
http://blog.csdn.net/billy_zh/category/22383.aspx
2、EF(Entity Framework)