NHibernate一个简单实例

    兄弟也是在慢慢学习NHibernate下面所说的NHibernate也是我个人对NHibernate的理解,我讲解的NHibernate主要是用在实际项目开发中的,其中有什么理解不正确的请各路高手指正,兄弟在这谢过了。

     NHibernate是一个面向.NET环境的对象/关系数据库映射工具。对象/关系数据库映射(ORM)这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。

   NHibernate不仅仅管理.NET类到数据库表的映射,还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和ADO.NET处理数据的时间。

首先我们要下载NHibernate最新版本 http://sourceforge.net/projects/nhibernate/ s

配置NHibernate

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Linq;
using System.Collections.ObjectModel;
using System.Diagnostics;

namespace NHibernateStudy
{
class Program
{
static void Main( string [] args)
{
// 第一步:获取Program类所在的程序集
Assembly assembly = typeof (Program).Assembly;
// 第二部配置
Configuration configuration = new Configuration()
// 读取hibernate.cfg.xml 文件
.Configure()
// 加载 类 和对应的xml
.AddAssembly(assembly)
// 处理标记
.AddInputStream(HbmSerializer.Default.Serialize(assembly));
// 建造会话工厂,以便建立会话
ISessionFactory sessionFactory = configuration.BuildSessionFactory();
ISession session
= sessionFactory.OpenSession();

}
}
}

配置数据库连接信息

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
< hibernate - configuration xmlns = " urn:nhibernate-configuration-2.2 " >
< session - factory >
< property name = " current_session_context_class " > thread_static </ property >
< property name = ' proxyfactory.factory_class ' > NHibernate.ByteCode.Spring.ProxyFactoryFactory, NHibernate.ByteCode.Spring </ property >
< property name = " connection.provider " > NHibernate.Connection.DriverConnectionProvider </ property >
< property name = " connection.driver_class " > NHibernate.Driver.SqlClientDriver </ property >
< property name = " dialect " > NHibernate.Dialect.MsSql2005Dialect </ property >
< property name = " show_sql " > true </ property >
< property name = " connection.connection_string " >
Data Source
= cml;User Id = sa;Password = sql;Initial Catalog = Northwind;
</ property >
< property name = " adonet.batch_size " > 500 </ property >
< property name = " generate_statistics " > true </ property >
< property name = " use_outer_join " > true </ property >
< property name = " command_timeout " > 60 </ property >
</ session - factory >
</ hibernate - configuration >

这个数据库配置信息可以说是一个固定模式,如果需要我们就改数据库版本,实际在网上都能找到<propertyname="dialect">NHibernate.Dialect.MsSql2005Dialect</property>

连接数据库的这段改成自己的数据库相应连接就可以

<property name="connection.connection_string">
      Data Source=cml;User Id = sa;Password=sql;Initial Catalog=Northwind;
    </property>

持久化类:

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
1 using System;
2   using System.Collections.Generic;
3   using System.Linq;
4   using System.Text;
5   using NHibernate.Mapping.Attributes;
6
7   namespace NHibernateStudy
8 {
9 [Class(Table = " Orders " , NameType = typeof (Order))]
10 public class Order: DomainModel
11 {
12 [Id(Name = " ID " , Column = " OrderID " )]
13 [Generator( 1 , Class = " native " )]
14 virtual public int ID { get ; set ; }
15
16 [Property]
17 virtual public DateTime ? OrderDate { get ; set ; }
18
19
20 [Property]
21 virtual public decimal ? Freight { get ; set ; }
22
23 [Property]
24
25 virtual public int EmployeeID { get ; set ; }
26
27 [ManyToOne(Column = " CustomerID " )]
28 virtual public Customer Customer { get ; set ; }
29
30 [ManyToOne(Column = " EmployeeID " , Fetch = FetchMode.Select)]
31 virtual public Employee Employee { get ; set ; }
32
33
34 public override string ToString()
35 {
36 return ID.ToString();
37 }
38 }
39 }
40  

  Hibernate使用简单的.Net对象(POCOs)这种编程模型来进行持久化,POCO类通过set和get属性 访问其内部成员变量,对外则隐藏了内部实现的细节看实例。

    NHibernate对属性使用的类型不加任何限制。所有的.NET类型和原始类型(比如string,char和DateTime)都可以被映射,也包括.Net 集合(System.Collections)中的类。你可以把它们映射成为值,值集合,或者与其他实体类相关联。Id是一个特殊的属性,代表了这个类的数据库标识符(主键)。

 为了让上面提到运行时类增强功能生效,NHibernate持久化类的所有的public的属性必须声明为virtual。

映射Employee

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
<? xml version = " 1.0 " ?>
< hibernate - mapping xmlns = " urn:nhibernate-mapping-2.2 " auto - import = " true " >
< class name = " NHibernateStudy.Employee, NHibernateStudy " table = " Employees " >
< id name = " ID " column = " EmployeeID " >
< generator class = " native " />
</ id >
< property name = " FirstName " column = " FirstName " />
< property name = " LastName " column = " LastName " />
< property name = " Title " column = " Title " />
</ class >
</ hibernate - mapping >

Employee.hbm.xml映射文件包含了对象/关系映射所需的元数据。元数据包含持久化类的声明和属性到数据库的映射(指向字段和其他实体的外键关联)。

   我们现在可以开始使用NHibernate的ISession了。它是一个 持久化管理器, 我们通过ISession来从数据库中存取数据。

 

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using NHibernate.Mapping.Attributes;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Linq;
using System.Collections.ObjectModel;
using System.Diagnostics;

namespace NHibernateStudy
{
class Program
{
static void Main( string [] args)
{
Assembly assembly
= typeof (Program).Assembly;

Configuration configuration
= new Configuration()
.Configure()
.AddAssembly(assembly)
.AddInputStream(HbmSerializer.Default.Serialize(assembly));

ISessionFactory sessionFactory
= configuration.BuildSessionFactory();
ISession session
= sessionFactory.OpenSession();

// NHibernate有不同的方法用来从数据库中取回对象

// 查询编号为 9 的员工09年 所作订单的运费总和

var v2
= session.Linq < Order > ()
.Where(o
=> o.Employee.ID == 9 )
.Where(o
=> o.OrderDate >= new DateTime( 1996 , 1 , 1 ) && o.OrderDate < new DateTime( 1997 , 1 , 1 ))
.Sum(o
=> o.Freight);




}
}
}


这就是我对NHibernate的理解,如有那理解错误请给指出。

注:Employee.hbm.xml映射文件以后不要用太麻烦了,可以在NHibernate配置中配置自动生成XML文件,强烈反对用生成器生成NHibernate(个人反对)。

源码下载地址: http://files.cnblogs.com/changminglong/NHibernate.rar

转载于:https://www.cnblogs.com/changminglong/archive/2010/08/27/1810201.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值