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技术还有很多其它的魅力等着我们去挖掘,而我们接触到的仅仅是冰山一角。
NHibernate框架魅力美的更多相关文章
- iOS开发系列--打造自己的“美图秀秀”
--绘图与滤镜全面解析 概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架.今天我们将围绕iOS中两大图形.图像绘图框架进行介绍:Quartz ...
- Nhibernate的Session管理
参考:http://www.cnblogs.com/renrenqq/archive/2006/08/04/467688.html 但这个方法还不能解决Session缓存问题,由于创建Session需 ...
- ADO.NET编程之美----数据访问方式(面向连接与面向无连接)
最近,在学习ADO.NET时,其中提到了数据访问方式:面向连接与面向无连接.于是,百度了一下,发现并没有很好的资料,然而,在学校图书馆中发现一本好书(<ASP.NET MVC5 网站开发之美&g ...
- "NHibernate.Exceptions.GenericADOException: could not load an entity" 解决方案
今天,测试一个项目的时候,抛出了这个莫名其妙的异常,然后就开始了一天的调试之旅... 花了很长时间,没有从代码找出任何问题... 那么到底哪里出问题呢? 根据下面那段长长的错误日志: -- ::, ...
- nhibernate连接11g数据库
我框架的数据映射用 nhibernate连接多数据库,这次又增加了oracle11g,负责开发的同事始终连接不上,悲催的sharepoint调试是在不方便... 下面描述下问题的解决,细节问题有3个: ...
- 全自动迁移数据库的实现 (Fluent NHibernate, Entity Framework Core)
在开发涉及到数据库的程序时,常会遇到一开始设计的结构不能满足需求需要再添加新字段或新表的情况,这时就需要进行数据库迁移. 实现数据库迁移有很多种办法,从手动管理各个版本的ddl脚本,到实现自己的mig ...
- 跟我学习NHibernate (1)
引言:Nibernate概述 NHibernate是一个ORM框架,NHibernate是一个把C#对象世界和关系世界数据库之间联系起来的一座桥梁.NHibernate 能自动映射实体模型到数据库,所 ...
- 让OData和NHibernate结合进行动态查询
OData是一个非常灵活的RESTful API,如果要做出强大的查询API,那么OData就强烈推荐了.http://www.odata.org/ OData的特点就是可以根据传入参数动态生成Ent ...
- MVC Nhibernate 示例
首先,非常感谢提出问题的朋友们,使得本人又去深入研究了NHibernate的<Session-Per-Request 模式>. 前言: 谈到NHibernate大伙并不陌生,搞Java ...
随机推荐
- 报错compile_str() flow.php on line 375的解决方法
flow.php line 375,flow.php 找到375行: * 保存收货人信息 */ $consignee = array( 'address_id' => empty($_POST ...
- TP-LINK telnet远程 重启路由器(转)
突然断网,以前房东的路由器管理页面可以打开,今天突然间就打不开了.ping了下,可以ping通,于是就想起了房东的路由器是TP-LINK的 可以 telnet登陆的.每次,断网,我都会重启房东的路由器 ...
- 阿赫亚web安全JSON
前言 JSON(JavaScript Object Notation),可以说,这一事实,浏览器,server数据交换标准.的格式如XML,或者其他自己定义的格式会越来越少. 为什么JSON这么流行? ...
- IT行业为什么没有进度
参加工作多年了,来来回回参与了N多项目,大部分都是政府性的招标项目.每个项目都是顺利进行验收,在这些验收过的项目中大部分都或多或少都有一定的时间延期,每个项目都能够和合同或者需求说明书对应的上,但是真 ...
- Word001
C# Word 类库 2009-08-06 22:10 13470人阅读 评论(10) 收藏 举报 c#objectstring文档microsoftexcel using System;using ...
- Linux新手命令
给老婆写了一份速成培训教材--最经常使用的命令及解释.当然每一个人工作内容不同,经常使用命令也不同,这仅仅是我的个人经验,并且要考虑到接受者的基础. ls:列出文件夹下的内容,类似于dos下的dir. ...
- 采用PopupWin控制消息推送功能
最近的项目需要,急需实现消息推送功能.接连试了很多办法,让我们用JavaScript为了实现啊,其效果是不咋好,最后,我发现了一个PopupWin这个,看着眼前的成绩不错,开始使用. 1.准备工作.先 ...
- UVA 12103 - Leonardo's Notebook(数论置换群)
UVA 12103 - Leonardo's Notebook 题目链接 题意:给定一个字母置换B.求是否存在A使得A^2=B 思路:随意一个长为 L 的置换的k次幂,会把自己分裂成gcd(L,k) ...
- 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context}
警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to'org.eclipse ...
- Android -- Looper.prepare()和Looper.loop() —深度版
Android中的Looper类,是用来封装消息循环和消息队列的一个类,用于在android线程中进行消息处理.handler事实上能够看做是一个工具类.用来向消息队列中插入消息的. (1) Loop ...