Spring.NET學習筆記18——整合NHibernate(基礎篇)

  NHibernate是一個基於.Net的針對關係型數據庫的對象持久化(ORM)類庫。NHibernate來源於非常優秀的基於Java的NHibernate關係型持久化工具。從數據庫底NHibernate來持久化你的.Net 對象到關係型數據庫。NHibernate爲你處理這些,遠勝於你不得不寫SQL去從數據庫存取對象。你的代碼僅僅和對象關聯,NHibernate自動產生SQL語句,並確保對象提交到正確的表和字段中去。

  Spring.NETNHibernate提供了很好的支持與封裝。Spring.Data.NHibernate.Generic.SupportSpring.Data.NHibernate.Support下的HibernateDaoSupport是Spring.NET提供的數據庫訪問對象(DAO)的基類,兩者的卻別在於對泛型的支持程度。我們以Spring.Data.NHibernate.Generic.Support.HibernateDaoSupport爲例,講解Spring.NET整合NHibernate開發。

  我歸納了一下,分爲三個步驟:

  一、實體對象的建立及配置

  二、數據訪問對象建立及配置

  三、業務處理層建立及配置

 

  首先讓我們學習一下NHibernate的實體對象的映射:我建立兩個實體“用戶信息”和“公司信息”。圖1所示。

 

圖1

 

 

NHibernate要求實體必須是帶有無參構造函數和帶有virtual修飾的屬性。兩個實體的關係是雙向(一對多——多對一)映射關係。

 

 

  以上就是實體對象與數據的映射文件,提供的配置我不詳細說明,請查看NHibernate的幫助手冊。

  接下來,我建立數據庫訪問對象(DAO)層。在這裏我使用了泛型Repository模式。

 

 

 

數據庫訪問對象我們可以讓它繼承於HibernateDaoSupport類,該類的HibernateTemplate屬性我們可以通過Spring.NET從外部注入。

 

 

db:provider節點是數據的連接字符串配置,我們引入xmlns:db="http://www.springframework.net/database這項命名空間便可以使用它。其中provider屬性爲數據庫提供者的名稱。以下是provider的詳細情況:

 

 

 

名稱

介紹

SqlServer-1.1

Microsoft SQL Server, provider V1.0.5.0 in framework .NET V1.1

SqlServer-2.0

Microsoft SQL Server, provider V2.0.0.0 in framework .NET V2.0

SqlServerCe-3.1

Microsoft SQL Server Compact Edition, provider V9.0.242.0

SqlServerCe-3.5.1

Microsoft SQL Server Compact Edition, provider V3.5.1.0

OleDb-1.1

provider V1.0.5000.0 in framework .NET V1.1

OleDb-2.0

provider V2.0.0.0 in framework .NET V2.0

OracleClient-2.0

Oracle, Microsoft provider V2.0.0.0

OracleODP-2.0

Oracle, Oracle provider V2.102.2.20

MySql

MySQL provider 1.0.10.1

MySql-1.0.9

MySQL provider 1.0.9

MySql-5.0

MySQL provider 5.0.7.0

MySql-5.0.8.1

MySQL provider 5.0.8.1

MySql-5.1

MySQL provider 5.1.2.2

MySql-5.1.4

MySQL provider 5.1.2.2

MySql-5.2.3

MySQL provider 5.2.3.0

Npgsql-1.0

Postgresql provider 1.0.0.0 (and 1.0.0.1 - were build with same version info)

Npgsql-2.0 -beta1

Postgresql provider 1.98.1.0 beta 1

Npgsql-2.0

Postgresql provider 2.0.0.0

DB2-9.0.0-1.1

IBM DB2 Data Provider 9.0.0 for .NET Framework 1.1

DB2-9.0.0-2.0

IBM DB2 Data Provider 9.0.0 for .NET Framework 2.0

DB2-9.1.0-1.1

IBM DB2 Data Provider 9.1.0 for .NET Framework 1.1

DB2-9.1.0.2

IBM DB2 Data Provider 9.1.0 for .NET Framework 2.

SQLite-1.0.43

SQLite provider 1.0.43 for .NET Framework 2.0

SQLite-1.0.47

SQLite provider 1.0.43 for .NET Framework 2.0

SybaseAse-12

Sybase ASE provider for ASE 12.x

SybaseAse-15

Sybase ASE provider for ASE 15.x

SybaseAse-AdoNet2

Sybase ADO.NET 2.0 provider for ASE 12.x and 15.x

Odbc-1.1

ODBC provider V1.0.5000.0 in framework .NET V1.1

Odbc-2.0

ODBC provider V2.0.0.0 in framework .NET V2

InterSystems.Data.CacheClient

Caché provider Version 2.0.0.1 in framework .NET V2

 

 

  可以根據自己的數據庫選擇不同的提供者名稱。connectionString屬性爲數據庫的連接字符串,這裏用${xxx}的方式來表示一個佔位符,因爲我們經常將Spring.NET的配置文件設置爲“嵌入系統資源”,這樣一來在程序編譯後就不能夠修改,所以我們就要在應用程序配置文件中填寫連接字符串,而不是在Spring.NET的配置文件中填寫。

 

 

  NHibernate中的Session控制取決於SessionFactorySpring.NET提供了LocalSessionFactoryObject類來統一管理SessionFactory。其中MappingAssemblies屬性爲實體程序集的名稱,可以填寫多個名稱。HibernatePropertiesNHibernate的配置,dialect屬性爲數據庫的方言,因爲是SQL server 2K數據庫,所以使用NHibernate.Dialect.MsSql2000Dialect proxyfactory.factory_class屬性爲延遲加載的代理類驅動,在NHibernate 2.1版中必須配置。hbm2ddl.auto屬性爲反向建立映射表的配置,我們配置爲update後,NHibernate會幫我們自動根據實體的結構生成數據庫中的表。

 

  接下來我們看一下業務處理層。

 

 

 

 代碼的編寫我不仔細講,我們主要學習一下相關的配置。

 

 

  我們在前幾篇學過AOP攔截和事務代理。Spring.NETNHibernate提供的事務代理是TransactionProxyFactoryObject。我們將改類的Target熟悉注入業務處理層的類,這樣Spring.NET會爲該類包裝上事務。

 

  最後我們寫一個單元測試類,對業務層進行單元測試。

 

 

 

配置文件:

 

 

  代碼下載

 

  數據庫我沒有上傳,因爲空間的問題。我設置了自動建表的屬性,可以用來自動創建數據庫表結構。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章