NHibernate随笔(1)

2009-07-08  籽藤 

 对于Hibernate,从07年底接触过一点皮毛之后,就搁置了。现在趁着暑期实训,我得把NHibernate好好学习一下。

 OK,首先说一下,为什么要用Hibernate、NHibernate这类玩意儿。

 Hibernate和NHibernate,前者用于J2EE,后者用于asp.net。这种对象-关系型数据映射组件,也就是持久化框架的原理是一样的。

 通常,我们会在MVC的业务逻辑层中,分离出一个“持久化层”,因为数据库的读写是一个很耗费时间和资源的操作,当大量用户同时直接访问数据库的时候,效率将非常低,如果中间有一个持久化层,就不需要每次从数据库读取数据,而是直接在内存中对数据进行操作,这样就节约了数据库资源,而且加快了系统的反应速度。况且,增加持久化层提高了开发的效率,使软件的体系结构更加清晰,在代码编写和系统维护方面变得更容易。这很符合面向对象开发的方式,便于并行开发。

  但是,持久层的代码大多是些令人兴味索然的内容:获取数据库连接,执行SQL语句,关闭数据库连接……而Hibernate和NHibernate则封装了数据库持久层的大多数技术细节,事务管理,数据库连接管理,sql生成等。优良的设计大大提高了数据库访问层的开发效率,并且通过对数据访问中各种资源和数据的缓存调度,实现了更佳的性能。

 从现在看来,Hibernate的学习资源还是远远多过NHibernate的,好在“NHibernate文档”已经攘括了NHibernate的要点,中文文档也翻译得很好。从使用的角度上,有很多人都推崇abluedogNHibernate Step by Step,但现在NHibernate已经到2.0了,CodeSmith也到了5.1,配置方法有很大不同。

  在配置文件中nhibernate 2.0必须使用urn:nhibernate-configuration-2.2;而NHibernate1.2的是urn:nhibernate-configuration-2.0。相应的,在**.hbm.xml中,NHibernate2.0使用urn:nhibernate-mapping-2.2.

 另外,配置文件的语法也有很大不同.我就是参照(http://hi.baidu.com/mytudousiprodb/blog/item/7fb9d78a0d15c7dbfd1f103c.html)解决问题的。但是,那文中的――“2、.hbm.xml 文件需要改动 如果是CodeSmith4.x版本自带的NHibernate生成的templates,那么请修改.hbm.xml的几个地方……”――我并没有做修改,却OK了。

我的环境是VS2008 SQL Server2005 NHibernate2.0.0

我的Person.hbm.xml内容如下:(BTW,**.hbm.xml文件属性设为“嵌入的资源”)

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
 <class name="Test.Model.Person, Test.Model" table="Person">
  <id name="Id" type="Int32" unsaved-value="null">
   <column name="id" length="4" sql-type="int" not-null="true" unique="true" index="PK_Person"/>
   <generator class="native" />
  </id>
  <property name="Name" type="String">
   <column name="name" length="50" sql-type="varchar" not-null="true"/>
  </property>
 </class>
</hibernate-mapping>

附上我的App.config内容:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <configSections>
  <section name="hibernate-configuration"
                  type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
 </configSections>

 <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
  <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider, NHibernate</property>
  <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
  <property name="connection.connection_string">
   Server=(local)\WZT2009;initial catalog=NHibernate;Integrated Security=SSPI
  </property>
  <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
  </session-factory>
 </hibernate-configuration >

</configuration>

  经过很纠结的配置之后,我的NHibernate学习已经完成了Step1,OK,继续前进……

 

 

326°/3267 人阅读/0 条评论 发表评论

登录 后发表评论