快捷搜索:  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>

完成之后的项目内容如下所示。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: