zoukankan      html  css  js  c++  java
  • NHibernate框架魅力美

       Nhibernate属于ORM框架之中的一个,在了解NHibernate之前我们先来了解什么是ORM? 

       ORM框架是为了将类对象和关系建立映射。事实上说白了,就是通过一个 Mapping将我们的实体类和数据库映射起来,建立了联系,相当于是在应用程序和数据库之间加了一个中间层。这样我们在程序中,仅仅须要直接操作对象,而不用关心数据库中的表、列和字段什么的。 


       这就好比我们吃饭,假设我们选择自己在家吃饭,我们就须要去油盐米菜,自己炒,炒完之后自己收拾。可是假设我们选择下馆子的话,我们仅仅须要去那点菜吃饭,拍拍屁股走人就OK了。详细这菜怎么做,做的好不好吃咱们管不着。这两种方式,在家吃相当于是未使用ORM的传统操作。什么操作都须要我们去了解关心。而饭馆就相当于是ORM框架映射,为我们处理了各种繁杂的操作,仅仅须要把最重要的环节即吃饭交给我们做即可。点菜就相当于是ORM配置,你仅仅须要告诉服务员你吃什么,她就会依据你的须要去配菜准备,菜好之后送上来即可。 


        以往我们写的程序,在D层中编写了各种SQL语句,并且有非常多近似通用的模式。写一条SQL(增删改查)语句,然后将sql,Command对象,參数保存起来,然后运行SqlCommand对象。对于每一个对象,我们都须要反复这些代码。怎样避免反复呢,Mapping会帮我们解决,它将SQL语句都封装好了,我们仅仅须要配置一下就能够,不用我们自己写D层代码,Mapping负责保存、删除和读取对象。


       NHibernate充分发扬了ORM框架的核心理论,其来源于java的Hiberanate技术。通过XML配置来建立对象和关系的映射。为什么我们须要这些映射呢?NHibernate这么做有什么优点?


       优点:首先,NHibernate使用时仅仅须要操作对象,摒弃了以往以数据库为中心的思想,属于全然的面向对象;其次,有较好的移植性,支持多种数据库,须要更换数据库或表,仅仅须要改动配置文件,灵活性大大增强。最后,提供了一个持久化的类,即仅仅是临时存储在Session中,数据永久保存在数据库。 


    NHibernate实现详细步骤: 


    1.建立实体对象(UserInfo)

    <pre name="code" class="csharp"> public class UserInfo
        {  
            public virtual int userId{ get; set; }  
            public virtual string userName{ get; set; }  
            public virtual string userPwd{ get; set; }  
        }  
    
    2.创建与对象类相关的映射文件UserInfo.hbm.xml
    <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHModel" namespace="NHModel.Entities">
    	
    	<class name="UserInfo" table="UserInfo">  //类名和表名映射
    		<id name="userId" type="Int32" unsaved-value="null">
    			<column name="userId" length="4" sql-type="int" not-null="true" unique="true" index="PK_UserInfo"/>
    			<generator class="native" />
    		</id>
    		<property name="userName" type="String">
    			<column name="userName" length="50" sql-type="nvarchar" not-null="false"/>
    		</property>
    		<property name="userPwd" type="Int32">
    			<column name="userPwd" length="4" sql-type="int" not-null="false"/>
    		</property>		
    	</class>
    </hibernate-mapping>
    


    3.创建整合配置文件:hibernate.cfg.xml


    	  <pre name="code" class="html">   <?xml version="1.0" encoding="utf-8" ?>  
          
          <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">   
            <session-factory>  
              <property name="hbm2ddl.keywords">none</property>      //这句一定要有
              <property name="connection.provider">  
                NHibernate.Connection.DriverConnectionProvider  
              </property>  
              <property name="connection.driver_class">NHibernate.Driver.Sql2008ClientDriver</property>  
              <property name="query.substitutions">hqlFunction=SQLFUNC</property>  
              <property name="connection.connection_string">  
                server=localhost;database=nhibernatesample;uid=sa;pwd=123456      //配置自己的数据库连接
              </property>  
              <property name="show_sql">false</property>       //是否显示SQL语句
              <mapping assembly="TestNH" />  
            </session-factory>  
          </hibernate-configuration>  

    
    

    4.实现加入用户測试

    <pre name="code" class="csharp">private void btnAdd_Click(object sender, EventArgs e)  
            {  
                Configuration cfg = new Configuration().Configure("hibernate.cfg.xml");  
                ISessionFactory factory = cfg.BuildSessionFactory();  
                ISession session = factory.OpenSession();  
                ITransaction transaction = session.BeginTransaction();  
                UserInfo userInfo = new UserInfo();  
                userInfo.userId = 1;  
                userInfo.userName = "NH";  
                userInfo.userPwd = "abc";   
                session.Save(userInfo);  // 运行用户加入操作   
                transaction.Commit(); // 运行事务  
                session.Close();  //关闭事务
                MessageBox.Show("用户加入OK!");  
            }  

       总结:Nhibernate使我们摆脱了反复枯燥的编写SQL语句。自己主动产生SQL语句,能够让我们投入到业务逻辑的实现上。.Net技术还有很多其它的魅力等着我们去挖掘,而我们接触到的仅仅是冰山一角。 



  • 相关阅读:
    C#中设置窗口在最前显示而其他窗口不能使用
    C#中关闭子窗口而不释放子窗口对象的方法
    C#窗体越界时鼠标还能回到初始坐标位置
    C#程序实现软件开机自动启动的两种常用方法
    C# 只开启一个程序,如果第二次打开则自动将第一个程序显示到桌面
    图标库网址收藏
    C# Winform打包部署时添加注册表信息实现开机自启动
    C# winform程序怎么打包成安装项目(VS2010图解)
    数据库的三级范式,涉及范式的问题
    基数排序
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4467061.html
Copyright © 2011-2022 走看看