NHibernate Step by Step

NHibernate Step by Step:序篇

很久以前,你可能习惯了connection.open,command.execute("select...")这样的代码,写啊写啊,你开始不停地 copy/paste,因为数据库的操作太雷同了,还好,粘粘贴贴倒也凑合,然后有一天客户说他们要用oracle,于是你开始抱着本oracle开发指南狂啃pl/sql,你开始试验调用oracle的存储过程该怎么写,参数是用@还是?或者是:,取个blob游标又要咋写,你纳闷为啥这不同的数据库 sql区别咋这么大呢?不都是号称符合啥sql几几的标准吗?你的头开始痛了,你开始写不同的DAL,代码与十指齐飞,脑袋昏昏天黑黑——又加班了!!这次第,怎一个愁字了得!!
然后你觉得再也不能这样过了,再也不能这样活了,你开始用DAAB,后来升级到Enterprise Library,恩,不错,代码好象少了,后来再加个Code Smith,恩,不错,自动生成代码,自己敲键盘少了,虽然你还得在不同的数据库间挣扎,还得把取出来的数据一点一点地填到你的实体类里,但是目前看上去还不赖,可以忙里偷闲泡杯两块八一包的劣质茶叶咂吧咂吧你那被劣质显示器辐射的开裂的嘴唇了。但是你觉得还不够,你在想,是否有Code Neo,或者干脆来个Code Matrix,整个DAL都不用自己写了,自动把数据库的数据填到自己的实体类里,然后对这个对象进行操作就行了,剩下的CRUD全部有这个Code Matrix来完成,达不达??
神啊,救救我吧……

“当当当当……“,O/R Mapping来到了大家的眼前。
O/R Mapping全称是object/rational mapping,即对象/关系数据库映射,意思是对象模型和关系模型的映射,也就是把我们常见的以对象模型表示的对象映射到关系模型上去,当然,这个关系模型我们常常指的是目前大部分主流的关系数据库,如oracle/sqlserver等等。基于.Net来说,o/r mapping就是将我们的.Net类映射到数据库中指定的表上,由O/R Mapping框架帮我们实现object<-->table之间的交互,我们完全不再需要写sql语句(当然不是绝对的),也不再关心背后用的是那种数据库,你只需要定义好对象和数据库该如何交互,剩下的,全部由O/R Mapping的框架来解决,你只需要如下代码即可:
Customer cust = framework.Get(...);
cust.Name = "newname";
framework.Save(cust);
或者:
framework.Delete(cust);
ok!!手起键盘落,整个世界清净了!!

是不是很动心啊??
ok,正式介绍今天的主角——Hibernate!!
Hibernate是一个目前应用的最广泛的开放源代码的对象关系映射框架,它对Java的JDBC(类似于ADO.Net)进行了非常轻量级的对象封装,使得程序员可以随心所欲的使用对象编程思维来操纵数据库,目前在国内Java开发界已经颇为流行,Hibernate+Spring往往是很多Java公司招聘的要求。而NHibernate,顾名思义,如同NUnit,NAnt一样,是基于.Net的Hibernate实现,但是目前介绍NHibernate的资料非常少,缺少一个系统完整的教程来全面的展现和深入NHibernate,而且现在NHibernate的文档又残缺不全,少的可怜,很多NHibernate的学习者往往都是通过 Hibernate的文档来学习,但是毕竟不是所有的.Net开发者都熟悉Java,也不是所有的人都有精力有时间去学习Java,所以,我准备开始一个 Step by Step的NHibernate教程,以便有兴趣的朋友能够快速的熟悉NHibernate,能够更快地体验NHibernate的开发乐趣。
我将会从零开始,配以详细的代码和图片,以便感兴趣的朋友能够最快最清晰地掌握NHibernate,任何建议,请e至:abluedog@163.com

posted on 2006-04-15 01:09 abluedog 阅读(9135) 评论(37)  编辑 收藏 所属分类: NHibernate

评论

#1楼  2006-04-15 01:20 梁广永      

不错,期待下文,   回复  引用  查看    

#2楼  2006-04-15 04:34 TomTom      

NHibernate 不错,但NHibernate 是不是放之四海通用.这个还要考虑考虑!   回复  引用  查看    

#3楼  2006-04-15 08:27 dudu      

支持并感谢作者写这样的教程!   回复  引用  查看    

#4楼  2006-04-15 08:46 tsoukw [未注册用户]

支持   回复  引用  查看    

#5楼  2006-04-15 09:22 Michael.zh      

世界上没有救世主,至少目前看来,NHibernate 如果依然为了通用和设计上的要求,而不顾性能上的问题的话,在很多关键应用领域让人望而却步。   回复  引用  查看    

#6楼  2006-04-15 09:22 etg1979 [未注册用户]

强烈支持   回复  引用  查看    

#7楼  2006-04-15 09:31 侵晨 [未注册用户]

期待楼主的后续。
是每天一篇么,还是不定期。不要有了开头没有结尾哦!   回复  引用  查看    

#8楼  2006-04-15 09:50 徐灿钊Asp.net专栏      

无比期待。   回复  引用  查看    

#9楼  2006-04-15 10:29 wigruky'Blog [未注册用户]

强烈期待中,感谢楼主,希望文章的速度快一点 ^   回复  引用  查看    

#10楼 [楼主] 2006-04-15 10:39 abluedog      

@Michael.zh
理论上讲,o/r mapping由于进行了反射、生成sql及框架运行的维护等等,性能是要比直接的数据库操作稍微差一点,但是你要考虑团队开发中出现的蹩脚的sql语句,没有考虑优化的架构等等可以直接影响ado.net性能的问题,而使用o/r mapping工具,基础的操作都有框架来完成,一个设计优良的框架足以弥补以上不足,况且使用o/r mapping后而产生的生产力的大幅提高,更快的开发效率,足以让人心动。
o/r mapping框架的性能问题,你可以去搜索一下hibernate与jdbc性能比较的文章,基本上都可以满足一般的企业开发。
至于你所说的“关键领域”,我不知道你是不是指一些对性能或者实时性要求非常高的环境,这样的项目,一般都不大会使用java/.net这样的基于虚拟机的语言来开发,比如电信方面项目等等的核心部分,毕竟,都不能与c/c++来比较。


@侵晨
我会尽量保持每周2到3篇的速度。   回复  引用  查看    

#11楼  2006-04-15 10:40 torome      

up
希望能坚持!1   回复  引用  查看    

#12楼  2006-04-15 11:10 剑在上海 [未注册用户]

期待下文,严重支持   回复  引用  查看    

#13楼  2006-04-15 11:13 左洸      

支持   回复  引用  查看    

#14楼  2006-04-15 11:58 SOSOS's BLog      

继续关注!!!!!!!很好!!!!!!!!!!   回复  引用  查看    

#15楼  2006-04-15 11:59 老燕      

一开始先别急着研究性能,应用领域的问题,先提出框架,然后再慢慢研究细节,这样的文章更有嚼头
支持楼主   回复  引用  查看    

#16楼  2006-04-15 12:31 思考中{OO}      

支持楼主,正打算开始学这个   回复  引用  查看    

#17楼  2006-04-15 14:40 Michael.zh      

我要声明一下,我非常赞成 abluedog 发出这一系列的学习文章,对大多数人来说,如何借鉴前人的经验学习一种新的技术,新的思想,或者说新的框架,都是非常有意义的,这里非常感谢 abluedog 的辛苦。

但我还是想说:世上没有救世主,也没有灵丹妙药,尤其在coding的工作中,对 NHibernate 抱着不切实际的期望的同学们,一切并不像大家想象的那么美好和令人心驰神遥,NHibernate 和大多数其他的技术一样,不管是过去的还是将来的,都有其闪亮的优点和不可回避的问题。

怀着一颗平常心,认真地学习其中值得借鉴的东西,并结合自身的实际工作加以应用,则是应有的态度。   回复  引用  查看    

#18楼 [楼主] 2006-04-15 14:55 abluedog      

@Michael.zh
“世上没有救世主,也没有灵丹妙药”

当然,也没有银弹。:)解决了持久层,还有业务层,表现层,都少不了写代码:)   回复  引用  查看    

#19楼  2006-04-16 11:31 林子      

@abluedog

性能问题是NH的最大问题所在!
上面说的“关键领域”,应该就是所有对性能方面要求较高的领域
当然在一般的项目或学习中用还是不错的选择!
  回复  引用  查看    

#20楼 [楼主] 2006-04-16 15:48 abluedog      

以下关于性能的QA来自Hibernate官方网站:
Many people try to benchmark Hibernate. All public benchmarks we have seen so far had (and most still have) serious flaws.

The first category of benchmarks are trivial micro benchmarks. Hibernate of course will have an overhead in simple scenarios (loading 50.000 objects and doing nothing else is considered trivial) compared to JDBC. See this page for a critique of a trivial benchmark. If you'd like to avoid writing your own trivial and not very conclusive tests, have a look at the perftest target in Hibernate's build file. We use this target to check if a trivial performance bug slipped into the Hibernate code. You can use it to verify the JDBC overhead of Hibernate in trivial situations. But, as should be clear now, these numbers are meaningless for real application performance and scalability.

In a fair benchmark with complex data associations/joins, highly concurrent access, random updates of data in the application, real-world data set size, and utilizing other Hibernate features, you will find Hibernate perform very well. Why is there no such benchmark provided by the Hibernate developers? The first reason is trust. Why would you believe that the numbers shown by the vendor of a product, in a comparative benchmark, are true? The second reason is applicability. Certainly, a fair benchmark would show the benefits of Hibernate in a typical complete application with realistic concurrent access. However, the number of variables in any decent benchmark make it almost impossible to transfer these results into reasonable conclusions about the performance of your own application. Your application is different. (If you came here from a forum thread, think about it: instead of arguing with you about your trivial micro benchmark, we would be arguing why you don't see the same results in your application...) For these reasons we always recommend that you benchmark your application yourself. We encourage you to see performance and load testing as a natural stage in the life of your application - don't go into production with only micro benchmarks. Setting up benchmarks for your application and scenario, and helping you in this stage is in fact one of our usual support and consulting services.
Conclusion?

It turns out that Hibernate is very fast if used properly, in highly concurrent multi-user applications with significant data sets.

原文在http://www.hibernate.org/15.html   回复  引用  查看    

#21楼  2006-04-17 02:46 卡卡.net      

sp!   回复  引用  查看    

#22楼  2006-04-25 10:12 westbulls [未注册用户]

ORM最主要解决了分层开发中的持久层的问题,在N层开发中非常重要,期待楼主的下文,最好能够同时提供一些ORM工具间的对比,这样会看问题可能会更全面,学习中.....   回复  引用  查看    

#23楼  2006-05-08 15:48 Androclus [未注册用户]

太好了,很期待!   回复  引用  查看    

#24楼  2006-08-02 20:43 XPang [未注册用户]

I really appreciate that!! Keep going ,man   回复  引用  查看    

#25楼  2007-03-26 12:42 双飞燕      

期待ing   回复  引用  查看    

#26楼  2007-05-23 21:35 xywhnh [未注册用户]

好东西,今天刚接触到NHibernate这个东西,真正感觉到N层架构的优势!   回复  引用  查看    

#27楼  2007-06-02 00:26 条码,条形码,条码打印机,条码扫瞄枪,标签,碳带,条码解决方案 [未注册用户]

好东西,今天刚接触到NHibernate这个东西,真正感觉到N层架构的优势   回复  引用  查看    

#28楼  2007-07-01 20:02 平凡的人 [未注册用户]

首先感谢楼主对大家的帮助,我现在也在学习.net下MVC模式以及数据持久化的应用,不知道大家有什么好的建议?   回复  引用  查看    

#29楼  2007-07-17 10:37 fangyc2007 [未注册用户]

看了看abluedog写的关于NHibernate的教程,我是刚刚接触NHibernate,对里边的东西是似懂非懂,看得懂是怎么会事,但是不知道怎么操作,但是非常感谢,让我一个初学者学到了可以学的东西   回复  引用  查看    

#30楼  2007-08-29 16:00 aaa [未注册用户]

好文章,期待中...   回复  引用  查看    

#31楼  2007-09-03 09:10 yang aiyou [未注册用户]

好文章,很好的文才,幽默感特强。支持,谢谢!   回复  引用  查看    

#32楼  2007-09-17 14:16 tonglanli [未注册用户]

好文章 真是牛啊 读起来这么顺   回复  引用  查看    

#33楼  2007-10-23 01:31 wood [未注册用户]

我们的给运营商做的ems是java的哦...   回复  引用  查看    

#34楼  2007-11-23 16:48 iliuda [未注册用户]

恩,正准备把网站升级用nhibernate,谢谢   回复  引用  查看    

#35楼  2008-03-21 15:23 Ryan Yu      

感谢楼主分享   回复  引用  查看    

#36楼  2008-03-26 10:14 老志      

今天把這五篇看完..感謝..   回复  引用  查看    

#37楼  2008-03-26 10:27 老志      

問一下..如何訂閱文章..試不出來..   回复  引用  查看    

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值