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="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技术还有更多的魅力等着我们去挖掘,而我们接触到的只是冰山一角。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。