NHibernate的基本使用、快速入门 - Microsoft.NET开发框架应用资源(zhuan)

第一步:
我们需要NHibernate的程序集:
NHibernate.dll
Log4net.dll
Iesi.Collections.dll
Castle.DynamicProxy.dll
至少四个,其中

NHibernate.dll是核心的程序集,

Log4net.dll是日志记录程序集,

Iesi.Collections.dll是集合框架的程序集,

Castle.DynameicProxy.dll控制反转的程序集

注意:需要同时拷贝4个dll,否则出现类似如下错误:未能加载文件或程序集“Iesi.Collections, Version=1.0.0.3, Culture=neutral”或它的某一个依赖项。为什么需要加载Iesi?为什么需要加载log4net?

第二步:
准备持久化类、实体类,它是O/R Mapping的映射对象,通过控制它来封装我们的数据

第三步:
使用NHibernate的配置文件
在配置文件中指定数据库的方式,连接数据库的方式
让NHibernate知道如何去使用连接数据库

第四步:
编写O/R Mapping的映射文件
让NHibernate知道如何去映射.NET与数据库之间的关系

最后使用强大的NHibernate来编写你的程序!
为了让NHibernate知道如何去连接数据库,所以你必须在我们.NET中的app.config或者web.config中去配置一下:

<configSections> <!--配置节-->
<section name="nhibernate"
type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  </configSections>

<!-- 配置信息用于指定NH以何种方式访问数据库-->
  <nhibernate>
     <!--连接提供者,取值必须是实现了IConnectionProvider接口的类的全名-->
    <add key="hibernate.connection.provider"
         value="NHibernate.Connection.DriverConnectionProvider" />
     <!--数据库方言,取值必须是继承之Dialect的类的全名-->
    <add key="hibernate.dialect"
         value="NHibernate.Dialect.MsSql2000Dialect" />
     <!--数据驱动类,取值必须是实现了IDriver接口的类的全名-->
    <add key="hibernate.connection.driver_class"
         value="NHibernate.Driver.SqlClientDriver" />
     <!--连接字符串,取值要与driver_class指定的数据驱动类对应.-->
    <add key="hibernate.connection.connection_string"
         value="server=(local);uid=sa;pwd=sa;database=dbtest" />
</nhibernate>

制作一个持久化的类:

public class Account //注意必须将属性设置为virtual虚拟的
    {
        private int id;

        virtual public int Id
        {
get { return id; }
set { id = value; }
        }
        private string username;

        virtual public string Username
        {
get { return username; }
set { username = value; }

 

}
        private string password;

        virtual public string Password
        {
get { return password; }
set { password = value; }
        }
    }

编写每个持久化类的配置
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name=“BE.Account,BE" table="account">
    <id name="Id" column="userid" type="Int32">
      <generator class="identity" />
    </id>
    <property name="Username" type="String" length="50"/>
    <property name="Password" type="String" length="50"/>
  </class>
</hibernate-mapping>

其中xmlns指定了使用NHibernate的版本,
class元素的name属性指定了持久化类的全名称,逗号隔开的是程序集的名称
table属性指定了对应的数据库中表名称
id元素是指定主键列名,name属性是指持久化类的属性名,column是表中列名
property元素是其他的每一列与持久化类的哪个属性对应
generator元素 中的class属性指定了是自动增长列

保存为Account.hbm.xml文件

下面开始使用NHibernate

using NHibernate;
using NHibernate.Cfg;


Configuration cfg = new Configuration();
cfg.AddAssembly(“BE");
ISessionFactory factory = cfg.BuildSessionFactory();
ISession session = factory.OpenSession();
ITransaction transaction = session.BeginTransaction();
Account a = new Account();
a.Username = “Guilee";
a.Password = "1234";
a.Id = 1;
session.Save(a);
//修改数据库的内容
//session.Update(a);
//删除数据库的内容
//session.Delete(a);
transaction.Commit();
session.Close();
首先,创建一个Configuration对象
Configuration对象能够解析所有.Net对象和后台数据库中的映射关系。
Configuration cfg = new Configuration();
cfg.AddAssembly(“BE");
Configuration对象会搜索装配件里的任何以hbm.xml 结尾的文件。还有其他方法加载映射文件,但这种方式是最简单的。
创建一个Session对象
ISession对象提供一个到后台数据库的连接,ITransaction对象提供一个可以被NHibernate管理的事务。
ISessionFactory factory = cfg.BuildSessionFactory(); ISession session = factory.OpenSession();
ITransaction transaction = session.BeginTransaction();
接着来增/删/改/查你的对象
现在你可以用使用传统的.Net方法来操纵对象。
NHibernate将查询的方式变成了面向对象的方法,针对查询最简单的使用方式是:
ICriteria c = session.CreateCriteria(typeof(BEAccount));
c.Add(Expression.Eq("Username",account.Username));
c.Add(Expression.Eq("Password",account.Password));
IList list = c.List();
使用ICriteria 表示一次查询动作
整个代码表示:
查询Account表,找到username为account.Username并且password为account.Password的所有记录
使用List来得到所有查询之后的结果

你可能感兴趣的:(Hibernate)