码迷,mamicode.com
首页 > 其他好文 > 详细

2. 快速入门-跟着例子走

时间:2016-04-15 18:20:18      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:

是否可以成功运行这个例子,对于增加你的学习信心很重要。

当然,其中遇到的很多不明白的问题、配置和代码等,先放一放,不要着急。

你目前的任务就是实现这个例子,并成功运行它。

 

我这里采用Web项目(你也可以采用WinForm 或 控制台程序):

1. 新建两个项目: 

  因为我们写的是Demo,所以并没有严格按照一种框架去搭建项目,只是简单的用了两个项目(之后还会添加一个Models类库项目),这样可以尽可能排除框架对你的干扰,让你把更多的精力花在学习NHibernate上面。

  NHibernateWeb 和 NHibernateHelper,其中:

  --- NHibernateWeb 是Web项目,你可以采用你熟悉的任何框架,如webform 或 mvc都可以;

  --- NHibernateHelper 是编写NHibernate相关代码的类库项目

2. 添加需要的dll

  我采用的是NuGet添加NHibernate,你也可以到官网下载:NHibernate,下载之后解压即可,目录结构如下表:

目录结构 说明
Configuration_Templates 项目相关配置模板文件,如连接数据库、方言等
Required_Bins

主要的几个dll:

Iesi.Collections:NHibernate中泛型列表List在这个dll里面

NHibernate.dll:主要的dll,肯定需要引用了

另外两个.xsd文件,是帮助你在vs下编写xml配置文件的,你需要把这两个文件复制到Vs安装目录\Xml\Schemas下,就可以了

  接下来你需要添加引用:

  首先把NHibernate.dll添加到这两个项目的引用(如果你和我一样,采用NuGet添加引用,那么可以省略这一步),然后把Configuration_Templates目录下的MySql.hbm.xml文件拷贝到NHibernateWeb 项目的根目录下,并执行以下两步操作:

    a. 重命名为hibernate.hbm.xml 

    (因为在调用NHibernate时,我们将采用默认的加载机制,而NHibernate默认加载的文件名就是bin下的hibernate.hbm.xml文件)

    b. 右键该文件并选择属性,将“复制到输出目录”选择为“始终复制” 

    (这样每次修改该文件后,不用手动复制的到bin目录下,否则NHibernate读取的始终是旧版本的配置文件)

 

现在,让我们再添加一个类库项目(之所以配置完之后再添加,是因为这个类库项目没有那么多的配置,比较简单。

添加一个类库项目:Models,该类库项目用于添加实体类和映射文件(很快你就知道是什么了,不用着急,比较简单)。

到目前你已经搭建好了整个项目结构,接下来要做的就是各种配置和编写相关的代码:

1. 首先配置项目配置文件hibernate.hbm.xml

  该文件的配置项很多,庆幸的是系统已经给出了比较合理的默认配置,所以目前我们只修改几处必须的配置:

  a. connection.connection_string : 数据库配置串,这个你应该很熟悉了吧,不多说

  b. 给标签<session-factory>添加最后一个子元素:<mapping assembly="Models" />

     -- 这个Models就是我们最后新建的这个类库项目的程序集

 

<?xml version="1.0" encoding="utf-8"?>
<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
    <session-factory name="NHibernate.Test">
        <property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property>
        <property name="dialect">NHibernate.Dialect.MySQLDialect</property>
        <property name="connection.connection_string">
            Database=donny;Data Source=127.0.0.1;User Id=root;Password=123456;Charset=utf8;
        </property>
    <mapping assembly="FrameTester"/>
    </session-factory>
</hibernate-configuration>

注: 其实该配置文件有很多方式可以配置,比如放在web.config中或者其他目录里面或者采用其他的名字等,为了能快速搭建起来,我们还是采用默认的这种方式,其他的之后我们会详细介绍。

 

2. 编写实体类和映射文件

  实体类对应着数据库中的一个表,但是实体类的属性对应着数据表中的哪个列呢?这个由映射文件类指定。

  a. 实体类

namespace Models
{
    public class User
    {
        public virtual int ID { get; set; }
        public virtual string Name { get; set; }
        public virtual int Role { get; set; }
        public virtual string Password { get; set; }
        public virtual string Descript { get; set; }
    }
}

  注意:实体类的属性必须是虚拟的(virtual),那是因为NHibernate内部实现要求的,目前记住就可以了。

 

  b. 映射文件 

  有两点必须注意:

    ** 映射文件的名称必须是 实体类名.hbm.xml

    ** 映射文件必须是 嵌入资源

    (嵌入资源的设置方法:右键文件-属性,选择“生成操作”为“嵌入的资源”)

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="FrameTester.Models" assembly="FrameTester">
  <class name="FrameTester.Models.User,FrameTester" table="user">
    <id name="ID">
      <column name="id" sql-type="int" not-null="true"/>
      <generator class="assigned"></generator>
    </id>

    <property name="Name"/>
    <property name="Role"/>
    <property name="Password"/>
    <property name="Descript"/>
  </class>
</hibernate-mapping>

该文件肯定会让你觉得头疼,之后我们会详细的介绍,所以不用担心。

但是细心的你,可能注意到在<hibernate-mapping>节点的属性中,有namespaceassembly属性,另外在<class>配置节的name属性中,也同样指定了命名空间和程序集,我是故意这么做的,有意告诉你这两个位置都可以指定,现实中,选择一种方式就可以了

 

3. 编写核心代码 -- 暂且这么说吧

在NHibernateHelper项目中添加一个class,如下:

public sealed class NHibernateHelper
    {
        private static readonly NHibernateHelper _helper = new NHibernateHelper();
        private NHibernateHelper() { this.Init(); }
        public static NHibernateHelper Helper { get { return _helper; } }



        private ISessionFactory _sessionFactory = null;

        private void Init()
        {
            Configuration cfg = new Configuration().Configure();
            this._sessionFactory = cfg.BuildSessionFactory();
        }

        public ISession GetSession()
        {
            return this._sessionFactory.OpenSession();
        }
    }

 

OK,你还有一步就成功了。

4. 添加引用并编写测试代码

 

把 NHibernateHelperModels 添加到 NHibernateWeb 的引用中。

然后新建一个Controller(我采用的是MVC4框架,你也可以添加一个index.aspx):

  a. MVC 

    在Controller添加一个ActionResult函数Index()添加以下代码:

  b. WebForm

    在index.aspx.cs的page_load()中添加以下代码:

 

ISession session = NHibernateHelper.Helper.GetSession();

            session.Save(new Models.User()
            {
                ID = 2,
                Name = "Donny",
                Descript = "测试",
                Password = "123",
                Role = 1
            });

            session.Flush();

 

如果你在数据库中发现了这条数据,那么你成功了。

 

如果失败了,按照以上过程梳理一下,是不是落下了哪个环节;

当然,你也可以给我留言,或许是我遗忘了什么,如此,那对不住了;

 

2. 快速入门-跟着例子走

标签:

原文地址:http://www.cnblogs.com/wangdy/p/5396247.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!