.Net——Nhibernate实现CRUD

简介:                最近用到SSH(spring+struct+hibernate),从java里面的hibernate,不自觉联系到.net里面的Nhibernate。        下面来简单聊下Nhibernate.    一,引入Dll               主要有三个:                 基本的就这三个,其他的,比如Castle.Core.dll,Castle.DynamicProxy2.dll,Iesi.Collections.dll,log4net.dll 就用到了再引入吧。



               最近用到SSH(spring+struct+hibernate),从java里面的hibernate,不自觉联系到.net里面的Nhibernate。


        下面来简单聊下Nhibernate.


    一,引入Dll

   

           主要有三个:


        


        基本的就这三个,其他的,比如Castle.Core.dll,Castle.DynamicProxy2.dll,Iesi.Collections.dll,log4net.dll

 就用到了再引入吧。


    二,编写Nhibernate配置文件


                      

<?xml version="1.0" encoding="utf-8"?>
<!-- 
This template was written to work with NHibernate.Test.
Copy the template to your NHibernate.Test project folder and rename it in hibernate.cfg.xml and change it 
for your own use before compile tests in VisualStudio.
-->
<!-- This is the System.Data.dll provider for SQL Server -->
<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
  <!--表明一些配置是针对session-factory配置的,sessionfactory是hibernate中的一个类,这个类主要负责保存hibernate的配置信息,以及对session的操作-->
  <session-factory>
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property><!--配置数据库的驱动程序,hibernate在连接数据库时,需要用到数据库的驱动程序-->
    <property name="connection.connection_string">server=ZB-LIUHCH-PC\SQLEXPRESS;database=TestMemcached;uid=sa;pwd=123456;</property>
      <!--Server=ZB-LIUHCH-PC\SQLEXPRESS;UserID=sa;Database=TestMemcached;Password=123456;-->
    <property name="adonet.batch_size">10</property>
    <property name="show_sql">true</property>
    <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
    <!--<property name="use_outer_join">true</property>-->
    <property name="command_timeout">10</property>
    <property name="hbm2ddl.auto">update</property>
    <property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
    <mapping assembly="NhibernateTest"/>
  </session-factory>
</hibernate-configuration>


   PS:文件属性为始终复制到输出路径;



三,编写实体类及其配置文件


    实体类:

 

namespace NhibernateTest
{
   public class User
    {
        public virtual string UserCode { get; set; }
        public virtual string UserName { get; set; }
        public virtual string UserAge { get; set; }
    }
}

   配置文件:


 

<?xml version="1.0" encoding="utf-8" ?>
<!--assembly:程序集,namespace:命名空间-->
<hibernate-mapping  xmlns="urn:nhibernate-mapping-2.2" assembly="NhibernateTest"  namespace="NhibernateTest">
  <class name="NhibernateTest.User,NhibernateTest" table="User">
    <!--主键-->
    <id name="UserCode" type="string" unsaved-value="null">
      <column name="UserCode" sql-type="nvarchar" not-null="true" unique="true"/>
      <generator class="assigned"></generator>
    </id> 
    <property name="UserName" type="String">
      <column name="UserName" sql-type="nvarchar"  not-null="false"/>
    </property>
    <property name="UserAge" type="String">
      <column name="UserAge" sql-type="nvarchar"  not-null="false"/>
    </property>

  </class>
</hibernate-mapping>


四,测试代码


       为了方便操作使用nhibernate,最好编写一个工具类:


         

 public class NHibernateHelper
        {
            private ISessionFactory _sessionFactory;
            public NHibernateHelper()
            {
                //创建ISessionFactory
                _sessionFactory = GetSessionFactory();
            }
            /// <summary>
            /// 创建ISessionFactory
            /// </summary>
            /// <returns></returns>
            public ISessionFactory GetSessionFactory()
            {
                //配置ISessionFactory
                return (new Configuration()).Configure().BuildSessionFactory();
            }
            /// <summary>
            /// 打开ISession
            /// </summary>
            /// <returns></returns>
            public ISession GetSession()
            {
                return _sessionFactory.OpenSession();
            }
        }


            之后我们写四段代码来简单看看CRUD操作:


          

  static void Main(string[] args)
        {
            Configuration configuration = new Configuration().Configure("hibernate.cfg.xml");  //nhibernate的配置文件的路径
            ISessionFactory sessionFactory = configuration.BuildSessionFactory();
            ISession isession = sessionFactory.OpenSession();

            #region 添加用户
                User user = new User() { 
                    UserName="漠漠水田飞白鹭",
                    UserAge="789",
                    UserCode="momoshuitianfeibailu"
                };
                isession.Save(user);
                //isession.Flush();
                //isession.Close();
              
            #endregion

            #region 读取用户信息
                User MyUser = isession.Get<User>("momoshuitianfeibailu");
            #endregion

            #region 更新用户信息
                MyUser.UserAge="00000000";
                isession.Update("momoshuitianfeibailu", MyUser); 
            #endregion

            #region 删除数据
                isession.Delete(MyUser);
                isession.Flush();
                isession.Close();

            #endregion
        }


             整个项目结构:


              

 



           小结:

                 以前在配置spring的时候就有这种感觉,感觉java平台下面的配置文件和。net平台下的配置文件配置起来大致是雷同的,还是蛮有意思的。


                 另一方面,与之前使用过的EF相比,EF因为有三种开发模式,code first,DB first, Model First,选择性比较大,如果我不想配置那么多文件,完全可以直接db first,之后各种东西就生成了,我直接用一个上下文参数就可以操作数据库。而Nhibernate的配置文件则要手写,万一我一手抖,写错一个字母,debug就耗费好多时间。


                 但是Nhibernate感觉比EF轻量一点儿,而且Nhibernate的透明持久化,这个特性挺有意思的,与EF相比,可以说它是基于Session的,不是长连接。


                     个人感觉就这么多啦。。

            









                               

目录
相关文章
|
开发框架 .NET Java
|
前端开发 .NET 索引
搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (一)搭建你的环境
使用这套框架不是很长时间。但也基本应用了几个项目中了。在此和大家分享一下我是怎样一步一步搭建此框架的。并为初学者提供一个简单的示范。欢迎共同讨论技术问题。【本人纯属菜鸟!不足之处多谅解!】 第一步:       首先要看一下我项目中三层与mvc以及Spring.Net,Nhibernate处在的哪一层。
1204 0
|
前端开发 数据库 SQL
搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (二)创建你的项目
本篇文章的目的:首先是创建解决方案。并创建相关的项目。先介绍一下项目的各自的作用: 从数据库层到表示层依次为: 数据库层:          1、接口IDao层:IDao          2、Dao层实现:HibernateDao和SqlDao               Hiberna...
1145 0
|
前端开发 数据库 索引
搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (三)实现数据库接口层和业务逻辑层
本篇是介绍我们完成数据库接口层和业务逻辑层的接口的设计和实现。 废话不多讲,还是怎么一步一步做。 第一步:设计IDao层。在MyWeb.WebTemp.IDao项目中添加IUserDao接口。
1004 0
|
缓存
NHibernate和ADO.Net的性能对比相差有多大?
公司开年终技术讨论会,因我提出NH的性能太低,经理决定进行一次测试。当然,测试要合理、普遍、公平。NH肯定比ADO.Net慢,这是不可否认了的,但究竟慢到什么程度,差别有多少,得有一个量来衡量。我打算对一个表进行添删改查每个操作做一千遍,为防止NH可能的缓存,打算在Select的Where条件使用随机参数。
601 0