zoukankan      html  css  js  c++  java
  • NHibernate使用简单示例

    NHibernate使用小示例

    1.新建Model类库项目。

    使用代码生成器生成Model类。

    此处以简单的UserInfo表作为示例。

    注意字段前必须以 virtual 修饰。

    namespace Model
    {
        public partial class UserInfo
        {
            public virtual System.Int32 Id { get; set; }
            public virtual System.String Name { get; set; }
        }
    }

    2.编写映射实体类与数据库的映射文件。

    新建一个xml文件,并且命名为 UserInfo.hbm.xml 此处必须以 表名.hbm.xml 结尾,并将其生成操作改为“嵌入的资源,因为NHibernate会以这种方式寻找映射关系。

    <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Model" namespace="Model">
      <class name="Model.UserInfo" table="UserInfo">
        <id name="Id" column="Id" type="int"></id>
        <property name="Name" column="Name" type="string"  />
      </class>
    </hibernate-mapping>

    3.新建一个DAL类库项目。

    新建一个NHibernateHelper类,作为生产和管理Session的工厂。

    namespace DAL
    {
        public class NHibernateHelper
        {
            private ISessionFactory _sessionFactory;
            public NHibernateHelper()
            {
                _sessionFactory = GetSessionFactory();
            }
    
            private static ISessionFactory GetSessionFactory()
            {
                return (new Configuration()).Configure().BuildSessionFactory();
            }
    
            public ISession GetSession()
            {
                return _sessionFactory.OpenSession();
            }
        }
    }

    保证每一个NHibernate类的对象只有一个Session。

    4.新建一个UserInfoDAL类,实现对UserInfo数据的增删改查。

    namespace DAL
    {
        public partial class UserInfoDAL
        {
            private ISession _isession;
    
            public UserInfoDAL()
            {
                _isession = new NHibernateHelper().GetSession();
            }
    
            public void Add(UserInfo u)
            {
                _isession.Save(u);
                _isession.Flush();
            }
    
            public bool Update(UserInfo u)
            {
                try
                {
                    _isession.Update(u);
                    _isession.Flush();
                    return true;
                }
                catch (Exception ex)
                {
                    return false;
                }
                finally
                {
                    _isession.Close();
                }
            }
    
            public bool Delete(UserInfo u)
            {
                try
                {
                    _isession.Delete(u);
                    _isession.Flush();
                    return true;
                }
                catch (Exception ex)
                {
                    return false;
                }
                finally
                {
                    _isession.Close();
                }
            }
    
            public UserInfo GetById(int id)
            {
                return _isession.Get<UserInfo>(id);
            }
    
            public IList<UserInfo> GetList()
            {
                IList<UserInfo> list = _isession.QueryOver<UserInfo>().List();
                return list;
            }
        }
    }

    5.新建控制台测试项目调用

    由于BLL和UI层不是本文重点,所以没有考虑依赖注入、分层、接口等,本文主要介绍是NHibernate的配置。

    在控制台项目中添加xml文件,名字为 hibernate.cfg.xml 不可更改,并且修改为“如果较新则复制”。

  • 相关阅读:
    Apache+Tomcat+Mysql+php整合jsp,php
    mysql数据类型详析(转)
    有向图(拓扑排序算法)
    FLEX获取GET数据
    Flex对象与组件的数据 双向绑定
    D3D学习摘记(I)中
    [转贴]深入理解Javascript闭包
    一个相当愚蠢的概念错误
    近日小记
    D3D学习摘记(I)上
  • 原文地址:https://www.cnblogs.com/sunniest/p/4458091.html
Copyright © 2011-2022 走看看