NHibernate框架魅力美

时间:2022-10-25 20:30:47

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技术还有很多其它的魅力等着我们去挖掘,而我们接触到的仅仅是冰山一角。

NHibernate框架魅力美的更多相关文章

  1. iOS开发系列--打造自己的&ldquo&semi;美图秀秀&rdquo&semi;

    --绘图与滤镜全面解析 概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架.今天我们将围绕iOS中两大图形.图像绘图框架进行介绍:Quartz ...

  2. Nhibernate的Session管理

    参考:http://www.cnblogs.com/renrenqq/archive/2006/08/04/467688.html 但这个方法还不能解决Session缓存问题,由于创建Session需 ...

  3. ADO&period;NET编程之美----数据访问方式&lpar;面向连接与面向无连接&rpar;

    最近,在学习ADO.NET时,其中提到了数据访问方式:面向连接与面向无连接.于是,百度了一下,发现并没有很好的资料,然而,在学校图书馆中发现一本好书(<ASP.NET MVC5 网站开发之美&g ...

  4. &quot&semi;NHibernate&period;Exceptions&period;GenericADOException&colon; could not load an entity&quot&semi; 解决方案

     今天,测试一个项目的时候,抛出了这个莫名其妙的异常,然后就开始了一天的调试之旅... 花了很长时间,没有从代码找出任何问题... 那么到底哪里出问题呢? 根据下面那段长长的错误日志: -- ::, ...

  5. nhibernate连接11g数据库

    我框架的数据映射用 nhibernate连接多数据库,这次又增加了oracle11g,负责开发的同事始终连接不上,悲催的sharepoint调试是在不方便... 下面描述下问题的解决,细节问题有3个: ...

  6. 全自动迁移数据库的实现 &lpar;Fluent NHibernate&comma; Entity Framework Core&rpar;

    在开发涉及到数据库的程序时,常会遇到一开始设计的结构不能满足需求需要再添加新字段或新表的情况,这时就需要进行数据库迁移. 实现数据库迁移有很多种办法,从手动管理各个版本的ddl脚本,到实现自己的mig ...

  7. 跟我学习NHibernate &lpar;1&rpar;

    引言:Nibernate概述 NHibernate是一个ORM框架,NHibernate是一个把C#对象世界和关系世界数据库之间联系起来的一座桥梁.NHibernate 能自动映射实体模型到数据库,所 ...

  8. 让OData和NHibernate结合进行动态查询

    OData是一个非常灵活的RESTful API,如果要做出强大的查询API,那么OData就强烈推荐了.http://www.odata.org/ OData的特点就是可以根据传入参数动态生成Ent ...

  9. MVC Nhibernate 示例

    首先,非常感谢提出问题的朋友们,使得本人又去深入研究了NHibernate的<Session-Per-Request 模式>.   前言: 谈到NHibernate大伙并不陌生,搞Java ...

随机推荐

  1. hdu 1025 dp 最长上升子序列

    //Accepted 4372 KB 140 ms //dp 最长上升子序列 nlogn #include <cstdio> #include <cstring> #inclu ...

  2. 获得Unix&sol;Linux系统中的IP、MAC地址等信息

    获得Unix/Linux系统中的IP.MAC地址等信息 中高级  |  2010-07-13 16:03  |  分类:①C语言. Unix/Linux. 网络编程 ②手册  |  4,471 次阅读 ...

  3. 545D&period; Queue

    http://codeforces.com/problemset/problem/545/D 题意:n个数的服务请求数组,求在其服务时间内,最大的可满足服务的请求数量 首先对服务请求数组按照从小到大排 ...

  4. 关于window&period;location不跳转的问题

    今天在码代码的时候遇到个问题:html里采用onclick事件来实现window.location = url的跳转,在内嵌元素上又加上了href="javascrit:;"的属性 ...

  5. linux调度器系列

    http://blog.csdn.net/wudongxu/article/category/791519

  6. 使用 HttpWebRequest 发送模拟 POST 请求

    使用HttpWebRequest发送模拟POST请求  网页中,如果form的method="POST",这时点击submit按钮可以给服务器发送了一个POST请求,如果metho ...

  7. Android快速开发框架——AndroidAnnotations&lpar;Code Diet&rpar;

    简介:AndroidAnnotations是一个依赖注入方式来简化代码结构 ,快速开发的开源框架,使结构代码更清晰,减少代码重复性.对今后我们做自动化测试和自动化埋点开发都会提高开发效率.跟我们之前使 ...

  8. 使用Python统计函数绘制复杂图形matplotlib

    一.堆积图 1.堆积柱状图 如果将函数bar()中的参数bottom的取值设定为列表y.列表y1代表另一个数,函数bar(x,y1,bottom=y,color="r")就会输出堆 ...

  9. Flask学习笔记(2)--最简单的小应用

    0x01 第一个小程序 PyCharm新建一个flask项目,第一个小程序,我们来看一下 #引入flask类 from flask import Flask #将Flask对象实例化 app = Fl ...

  10. 6&period;对图像进行ROI选取并操作

    void Test_ROIWith2Image() { Mat g_srcImage=imread("D:\\OpenCV Projects\\OpenCV_Test_Image\\6.jp ...