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 ...
随机推荐
- 我的Android进阶之旅------>经典的大牛博客推荐(排名不分先后)!!
本文来自:http://blog.csdn.net/ouyang_peng/article/details/11358405 今天看到一篇文章,收藏了很多大牛的博客,在这里分享一下 谦虚的天下 柳志超 ...
- hdu4635(最多加多少边,使得有向图不是强连通图)
连边的最后肯定是两个集合x,yx集合的每个元素,到y集合中的每个元素都是单向的边x集合,和y集合都是完全图设a为x集合的点的个数, b为y集合的那么答案就是 a * b + a*(a-1) + b*( ...
- poj3694(动态询问割桥的数目)
给我们一个图,然后有q次加边的操作,问每次加完边之后有多少个桥存在 首先用dfs求出所有的桥,然后dfs的过程中生成了一棵dfs树,该树有的边是桥,有的不是,用bridge[v] = true , 表 ...
- lightoj1038(期望dp)
给定一个数字d,随机选择一个d的约数,然后让d除以这个约数,形成新的d,不断继续这个步骤,知道d=1为止, 要我们求将d变为1的期望次数 设d1,d2...dj是除以约数后,形成的行的d,且dj==d ...
- siwft初学(一)
今天刚開始学习swift语言.首先须要下载xcode6 beta版本号.正式版本号然后会公布.自己学习总结一下,假设有误.请大家指出. 创建project的时候.language选择swift语言. ...
- session与cookie的差别
session session 的工作机制是:为每一个訪客创建一个唯一的 id (UID),并基于这个 UID 来存储变量.UID 存储在 cookie 中,或者通过 URL 进行传导. ...
- ubuntu12.04 安装和配置jdk1.7
第一步:下载jdk-7-linux-i586.tar.gz wget -c http://download.oracle.com/otn-pub/java/jdk/7/jdk-7-linux-i586 ...
- UNIX环境高级编程——Linux进程地址空间和虚拟内存
一.虚拟内存 分段机制:即分成代码段,数据段,堆栈段.每个内存段都与一个特权级相关联,即0~3,0具有最高特权级(内核),3则是最低特权级(用户),每当程序试图访问(权限又分为可读.可写和可执行)一个 ...
- 用golang写的生成文件md5sum,检验文件md5sum
源代码地址: https://github.com/sndnvaps/md5sum-golang
- Jenkins详细安装与构建部署使用教程(转)
Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能.Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括:1.持续的软件版本发布 ...