?
快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

游艇會官方線路:【Spring.NET+NHibernate教程】4、基本的數據訪問實現示例

?

一. 籌備數據

數據造訪自然又要數據了,這里我們應用 《Microsoft SQL Server 2008技巧黑幕:T-SQL說話根基 》 一書中的示例數據庫,這本書的具體先容可以在這里找到。

異常好的一本書,此中的一些內容在其余地方是找不到的,比如查詢的處置懲罰歷程以及對 SQL Server 中鎖的先容等等,不幸的是書中供給的示例代碼地址被墻了,在此供給一份本站下載。

你必須已經安裝了 SQL Server 2008,各類版本都可以,在查詢闡發器窗口中,直接履行下載的腳本,就可以完成數據庫的創建了。完成之后的數據庫如圖所示。

下面我們將要造訪此中的 Sales.Customers 表,這個表的布局如下:

二. 創建辦理規劃

打開 Visual Studio 2010, 創建一個新的網站項目。

1. 創建實體項目

在辦理規劃中,添加一個新的類庫項目,這里命名為 Forbetter.Domain。

刪除模板中自動添加的 Class1.cs, 在此中添加一個類文件 Customer.cs,改動此中的代碼為如下內容。

using System;

using System.Collections.Generic;using System.Linq;

using System.Text;

namespace Forbetter.Domain{

public class Customer{

public virtual int Id { get; private set; }public virtual string CompanyName { get; set; }

public virtual string ContactName { get; set; }public virtual string ContactTitle { get; set; }

public virtual string Address { get; set; }public virtual string City { get; set; }

public virtual string Region { get; set; }public virtual string PostalCode { get; set; }

public virtual string Country { get; set; }public virtual string Phone { get; set; }

public virtual string Fax { get; set; }}

}

今后,我們對數據庫中 Customer 表的造訪將經由過程這個類進行。

必要留意的是,此中的屬性都應用 virtual 進行了修飾。這是 NHibernate 的要求。

為了表達這個類與關系之間的映射關系,在 NHibernate 中必要定義工具關系映射,映射的要領有多種,最常見的是應用 xml 設置設置設備擺設擺設文件。

在項目中增添一個名為 Customer.hbm.xml 的 xml 文件,這個文件的擴展名必須為 hbm.xml。今后, NHibernate 可以自動探求這種擴展名的文件來探求映射關系。

在屬性窗口中,將這個文件的天生操作設置為:嵌入的資本,這樣這個文件將會被編譯器嵌入到天生的 dll 文件中。

這個文件的內容如下:

xml version="1.0" encoding="utf-8" ?>

hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Forbetter.Domain">

class name="Forbetter.Domain.Customer" table="Sales.Customers" lazy="false" 游艇會官方線路>

id name="Id" unsaved-value="null" column="custid" type="int" >generator class="identity" />

id>

property name="CompanyName" column="CompanyName"length="40"not-null="true" index="CompanyName"/>property name="ContactName" length="30" not-null="false"/>

property name="ContactTitle" length="30"not-null="false"/>property name="Address" length="60"not-null="false"/>

property name="City" length="15"not-null="false" index="City"/>property name="Region" length="15" not-null="false" index="Region"/>

property name="PostalCode" length="10"not-null="false" index="PostalCode"/>property name="Country" type="String" length="15"not-null="false"/>

property name="Phone" length="24"not-null="false"/>property name="Fax" length="24"not-null="false"/>

class> hibernate-mapping>

現在,這個項目的內容應該如下。

2. 創建數據造訪項目

在辦理規劃中添加第三個項目,

項目中必要添加對 Forbetter.Domain 的引用。

這里開始應用 NHibernate 了,為項目添加 NHibernate 的引用。這里涉及到兩個法度榜樣集:NHibernate.dll 和 Iesi.Collectionss.dll,在項目中還應用了 Spring.NET 的特點,以是還必要添加對 Spring.Core.dll 的引用。

統共會有四個法度榜樣集的引用。

在這個項目中添加一個文件夾 Config,然后,在此中增添一個 xml 文件,命名為 dataAccess.xml。這個文件的天生屬性,也必要定義為嵌入的資本,此中的內容如下:

xml version="1.0" ?>

objects xmlns="http://www.springframework.net"xmlns:db="http://www.springframework.net/database"

xmlns:tx="http://www.springframework.net/tx">

description>

數據造訪的設置設置設備擺設擺設信息包括:DbProvider

NHibernatedescription>

object type="Spring.Objects.Factory.Config.PropertyPlacehold游艇會官方線路erConfigurer, Spring.Core">property name="ConfigSections" value="spring/databaseSettings"/>

object>

db:provider id="DbProvider"

provider="SqlServer-2.0"connectionString="Data Source=${db.server};Database=${db.database};Integrated Security=true;"

/>

object id="NHibernateSessionFactory"

type="Spring.Data.NHibernate.LocalSessionFactoryObject,Spring.Data.NHibernate32">

property name="DbProvider" ref="DbProvider"/>

property name="MappingAssemblies">

list>value>Forbetter.Domainvalue>

list>property>

property name="HibernateProperties">dictionary>

entry key="dialect" value="NHibernate.Dialect.MsSql2008Dialect"/>

entry key="use_proxy_validator" value="false" />entry key="show_sql" value="true"/>

dictionary>

property>

property name="ExposeTransactionAwareSessionFactory" value="true" />

object>

objects>

這里必要的留意的是,在數據庫連接串中,應用了類似 ${db.server} 的要領,這里的 db.server 是定義在設置設置設備擺設擺設文件中變量名,我們將會在主法度榜樣的設置設置設備擺設擺設文件中定義這些變量,在這里經由過程名稱來應用。今后必要改動數據庫連接信息的時刻,就可以不合找到這個設置設置設備擺設擺設文件,而直接在主法度榜樣的設置設置設備擺設擺設文件中進行改動就可以了。

第二個文件中,定義了應用 NHibernate 造訪數據庫的接口,因為在所有的 Dao 工具中都必要經由過程 SessionFactory 來造訪當前的會話工具,定義了接口 INHibernateSessionFactory。

using System;

using System.Collections.Generic;using System.Linq;

using System.Text;

namespace Forbetter.Dao{

interface INHibernateSessionFactory{

NHibernate.ISessionFactory SessionFactory { set; get; }}

}

然后,增添第三個文件, ICustomerDao.cs,這是一個接口定義文件,在 Spring.NET 中經由過程接口來耦合各個部分,這也是 Spring.NET 代理的特征。

using System;

using System.Collections.Generic;using System.Linq;

using System.Text;

namespace Forbetter.Dao{

public interface ICustomerDao{

IQueryable GetAllCustomers();}

}

第四個文件為 CustomerDao.cs,實現這兩個接口。

using System;

using System.Collections.Generic;using System.Linq;

using System.Text;

using NHibernate.Linq;

namespace Forbetter.Dao{

[Spring.Stereotype.Repository]public class CustomerDao

: ICustomerDao, INHibernateSessionFactory{

// Nhibernate 會話支持public NHibernate.ISessionFactory SessionFactory { set; get; }

public IQueryable GetAllCustomers()

{NHibernate.ISession session = this.SessionFactory.GetCurrentSession();

var query = session.Query();

var result = from customer in query

orderby customer.CompanyNameselect customer;

return result;}

}}

此中 SessionFactory 下面應用 S游艇會官方線路pring.NET 的要領進行注入。

添加第五個文件,objects.xml,在這里應用 Spring.NET 的要領定義數據造訪工具,并進行注入。留意天生要領也必要為嵌入的資本。

xml version="1.0" encoding="utf-8" ?>

objects xmlns="http://www.springframework.net">

object id="CustomerDaoImpl" type="ForBetter.Dao.CustomerDao, ForBetter.Dao">

property name="SessionFactory" ref="NHibernateSessionFactory"/>object>

objects>

現在,這個項目已經完成了,編譯一下。項目中的內容該當如下所示:

3. 添加辦事變目

平日我們還必要一個營業層,這里我們創建一個 Service 項目來表示一下。

這個項目必要引用的內容會多一些,包括 Domain 項目,Dao 項目,以及 Spring.NET 的三個法度榜樣集。Spring.Core, Spring.Data, Spring.Aop。

在項目中同樣定義一個辦事接口。

using System;

using System.Collections.Generic;using System.Linq;

using System.Text;

namespace Forbetter.Service{

public interface ICustomerService{

Forbetter.Dao.ICustomerDao CustomerDao { set; get; }IList GetAllCustomers();

}}

然后是辦事的實現。

using System;

using System.Collections.Generic;using System.Linq;

using System.Text;

namespace Forbetter.Service{

[Spring.Stereotype.Service][Spring.Transaction.Interceptor.Transaction(ReadOnly=true)]

public class CustomerService:ICustomerService

{public Forbetter.Dao.ICustomerDao CustomerDao { set; ge游艇會官方線路t; }

public IList GetAllCustomers()

{IQueryable query = this.CustomerDao.GetAllCustomers();

return query.ToList();}

}}

在項目中添加一個名為 Config 的文件夾,在此中添加一個工具定義文件 objects.xml。

xm游艇會官方線路l version="1.0" encoding="utf-8" ?>

objects xmlns="http://www.springframework.net">

object id="CustomerServiceImpl" type="Forbetter.Service.CustomerService">

property name="CustomerDao" ref="CustomerDaoImpl"/>object>

objects>

完成之后的項目內容如下所示。

免責聲明:以上內容源自網絡,版權歸原作者所有,如有侵犯您的原創版權請告知,我們將盡快刪除相關內容。

您可能還會對下面的文章感興趣:

快三平台开户