orm實體映射

作者:佚名 時間:2007-06-26
 關於ORM實體映射的感想 (Object /Relational Mapper )2005-05-29  njbaige/白鴿  於蘇州
What  ORM?
Object /Relational Mapper Why ORM
一般的數據庫訪問是建立於傳統的數據庫訪問模型的基礎之上,
即是Connection,Command等對象,通過SQL語句與數據庫交互,並返回結果
現在.NET下面的數據庫訪問框架已經到了ADO.NET 時代,ADO.NET 的訪問方式
詳見MSDN的相關文檔,這不是本文討論的重點。但是要說明的是,在.NET 環境
下的數據訪問,都得要和ADO.NET打交道,那個是最底層得東西,我們今天談的
數據庫映射框架底層也是基於ADO.NET的訪問模式,只是他們進行了很有效的封裝
是得對數據庫的操作從傳統的SQL模式,轉換爲基於對象的模式。
使業務邏輯與數據層分離,減少之間的藕合性,讓系統開發對數據庫透明目前在網絡上大家可以找到好幾種持久層,其實各個持久層的思想都是相同的,只是在實現的方式上,
還有一些細節功能上有差異,每個持久層都有獨特之處或是不足之處How ORM 實體映射:將數據庫中的實體(一般是一張表)映射爲類,對數據庫的操作就
直接轉換爲對這些實體的操作:包括新,增,刪,改等。採用實體的操作,會使我們對數據
庫訪問時,更方便,減少很多不必要的代碼
關係映射:數據庫中多個表之間會有相互的關係,怎樣把這些關係也反映到映射好的類中
這就是關係映射,不過相比實體映射,關係映射實現起來更難,這也是評估不同ORM好壞的
一個重要因素
高級查詢:在數據庫操作中,用得最多的是數據獲取(Retrieve)。查詢條件也是很多樣,會
有關聯查詢的情況,獲取的結果也是要定製的,而不是簡單的每個表的所有字段。
這點也是ORM實現最關鍵的地方,各自實現的方式不同,而且有的用起來也很麻煩,不友好。
感覺還不如直接採用SQL語句來的方便。這點NHibernate繼承了Hibernate的長處,採用HQL
查詢語言,功能最爲強大。其他的ORM 就不是很方便了。個人覺得還有必要保留SQL語句接
口,返回Table對象也是有不錯的。事務處理:在數據可靠性要求很高的時候,需要引入事務。由於ADO.NET 中對事務的支持
很好,所以在ORM實現起來也是很棒的,一般的框架都支持這樣的事務。實體類和操作類的生成: ORM說到底就是幫我們生成了一個功能強大的數據庫訪問類,
裏面包括實體對象類,實體操作類等,實現了這樣的思想,在代碼生成上也需要友好,方便
才能爲大衆所用。所以一個優秀的ORM框架需要搭配一個好的代碼生成工具。目前一部分框架都有的,
支持直接同數據庫連接,選擇要生成的數據表,直接生成CS文件,編譯成DLL文件,直接導入到工程中就能用啦,
是不是很酷~(不過有的ORM框架需要一些配置文件,也有生成的哦)數據訪問實現方式:對實體對象的獲取,更新保存至數據庫,在ORM的底層都需要通過
連接來實現(不管是SQL連接還是OLEDB 連接,還是ORACLE連接 ),他們實現的方式也有不同
這決定了我們在代碼中的操作方式也不同。一種是通過一個Manage類來實現,就像NHibernate、ORM.NET等,
這樣的有點是連接操作效率更高,公用一個連接操作實體,缺點是我們使用起來不是很方便,
不是完全符合對象映射的構想,每次操作都得取找那個Manage,麻煩;還有一種是直接放到實體類中,
也就是每一個實體類中都封裝好了Save,del等數據訪問方法,要操作直接調用,就不要再去麻煩第三者了~目前用過幾個ORM框架,下面是主要操作方式的學習筆記:
一 . ORM.NET   下載URL:http://www.olero.com/ormweb/index.aspx
一個國外的ORM框架,主要是生成代碼工具很酷,才試用的。幫助文件也全,不過爲E文的。
啓動工具,連接至SQL Server(好像它只支持SQL Server,用的是System.Data.SqlClient )
,顯示出數據庫中的每一張表和相應的關係,選擇要生成的實體對象,配置文件路徑和CS類名之後,
代碼就出來了。就一個DLL(外帶一個連接配置文件,也可以不用,在代碼裏面賦值就OK)去看了裏面的具體內容,
實體映射,事務處理是沒問題的,在數據的複雜查詢上,採用了自定義的一個查詢條件類,
支持很複雜的查詢條件(不過感覺開始用起來比較難上手)二  SmartPersistenceLayer  下載URL;http://www.cnblogs.com/tintown/category/12787.html 
附很詳細的幫助文檔和實例簡稱SPL,最新版本3.1 , 聽棠大哥的作品,也是目前國產最棒的ORM映射框架,以郭先堯的Xxmm.Net爲基礎做的。
(不是幫他打廣告,而是裏面的功能確實很Cool,不過也有不是很完美的地方-感覺)
支持SQL Server(System.Data.SqlClient)、Access(System.Data.OleDb)、Oracle(System.Data.OracleClient)、
Informix (ODBC連接方式)
  提供“併發處理”、“異構數據庫事務處理”、“多帳套”、“實體克隆”、“Top功能”等解決方案。
有代碼生成工具 SmartRobot配置文件:是採用Config/DatabaseMap.xml ,設置數據庫的連接參數
O/R Mapping 採用Config/ClassMap.xml ,設置數據庫中表字段和實體類之間的對應關係基本的實體操作 :
實體類繼承於EntityObject,具父類爲SPL中的一個public abstract類,只要具體的實體類繼承後,
實體類就擁有了Save(),Retrieve(),Delete()的實體操作功能,無需借用Manage類來實現如:
StudentEntity student=new StudentEntity();  //實體化一個學生對象 //以下進行屬性賦值
//student.Id=1;                        //此爲自動增長,SPL會自動獲取 student.No=” 200401”;
student.Name=”張三”;
student.Birthday=DateTime.Parse(“1979-01 -22”);
student.Grade=2;
student.Score=580;
    student.Save();是不是不用串SQL語句了?Criteria(標準)操作:對複雜條件的,返回值爲實體對象集合的操作
採用幾個Criteria(標準)對象實現RetrieveCriteria(獲取標準)
UpdateCriteria (更新標準)
DeleteCriteria(刪除標準)RetrieveCriteria rc=new RetrieveCriteria(typeof(StudentEntity)); //實例化        Condition c=rc.GetNewCondition();  //實例化一個條件        c.AddEqualTo(StudentEntity.__GRADE,2);   //二年級條件        c.AddMatchPrefix(StudentEntity.__Name,’劉’); //匹配’劉’字開頭        c.OrderBy(StudentEntity.__NO);             //按學號排        DataTable dt=rc.AsDataTable() ;              //以DataTable方式返回
EntityContainer ec=rc.AsEntityContainer();   //以實體集合的形式返回,然後在集合中操作Entity。
有點類似RowCollectionrc.AsEntity();  //返回實體集合中的第一個對象rc.Top=20;  可以返回前20條記錄哦但是在複雜的表間連接,嵌套查詢做得不夠,聽棠大哥解釋的是採用數據庫中的視圖來完成。
所以我現在對於很複雜的查詢,還是採用SQL傳遞,返回TABLE的方式,這點有待改進。
不過也是所有ORM要面對的難題哦~三  NHibernate  下載URL:http://nhibernate.sourceforge.net/
國外的一個ORM映射框架。繼承了JAVA平臺Hibernate的血統,不過功能
有待完善,但應該算是開源的業內最權威的ORM框架了(不知道是不是沾了Hibernate的光~)操作非常全面,規範。開發的過程 1.新建一個將要持久化.Net對象的表2.構建一個需要被持久化的.Net類3.構建一個可以讓NHibernate知道如何持久化對象屬性的映射文件4.構建一個讓NHibernate知道如何連接數據庫的配置文件]5.使用NHibernate的APINhibernate雖好,但是未提供工具來自動產生schema文件和代碼,這是目前比較麻煩的,
完全手寫,包括設置表和.Net類的編寫,比較鬱悶,所以讓很多初學者望而卻步,或者在觀望中。期待很酷的工具能出現這篇關於 Nhibernate的文章寫得很好,我就不羅嗦了,要不大家會砸我滴~
NHibernate快速指南 http://dev.csdn.net/develop/article/63/63977.shtm據不完全統計,.NET下的ORM 有如下這些,高手們用了發發意見啊~.NET Persistence BBADataObjects DataObjects.NET Data Tier Modeler for .NET DotNorm Eldorado.NET Enterprise Core Objects (ECO?) Entity Broker eXpress Persistent Objects for .NET FastObjects.NET JC Persistent Framework LLBLGen Pro ModelWorks Nhibernate Nolics.NET Norm Norpheme ObjectBroker ObjectSpaces ObjectSpark Objectz.NET OJB.NET OPF.Net (Object Persistent Framework) ORM.NET Pragmatier Data Tier Builder RapTier Sisyphus Persistence Framework TierDeveloper Bob.NET ObjectPersistor.NET Genome
發佈了32 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章