首页 > 代码库 > NHibernate框架魅力之美

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=http://www.mamicode.com/"null">>

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="dialect">NHibernate.Dialect.MySQL5Dialect</property>  
          <property name="query.substitutions">hqlFunction=SQLFUNC</property>  
          <property name="connection.driver_class">  
            NHibernate.Driver.MySqlDataDriver  
          </property>  
          <property name="connection.connection_string">  
            Data Source=localhost;Database=nhibernatesample;User Id=sa;Password=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技术还有更多的魅力等着我们去挖掘,而我们接触到的只是冰山一角。