![]() |
#2
冰镇柠檬汁儿2007-04-16 09:37
NHibernate简介 - 什么是NHibernate 里面只需要关心这些对象,NH生成sql语句并能为你取到正确的东西. 在本文档中,前提是你已经手动的数据库的创建喝.Net类的编写... 2000): 加属性.一个对应于上面数据库结构的类可以写成这个样子: public string UserName private来标记你的属性. 方法就是为每一个类编写一个映射文件,如果你把命名为"XXX.hbm.xml"的映射文件和XXX类文件放在同一目录下,NH会很让 一切变得 很轻松.这儿,我们的User.hbm.xml可能会像这样:
<generator class="assigned" /> </id> <property name="UserName" column="Name" type="String(40)"/> <property name="Password" type="String(20)"/> <property name="EmailAddress" type="String(40)"/> <property name="LastLogon" type="DateTime"/> </class> </hibernate-mapping> nate有些不同,我们必须告诉NH这个类从哪儿来的.这个差异是由.Net和Java Reflect机制的不同引起的-zyyang).这种情况下,我们是 从Assembly NHibernate.Demo.QuickStart中载入NHibernate.Demo.QuickStart.User类..NH遵守.Net Framework使用Reflection载入 类型的规则-所以遇到什么疑惑,就去查查.NET Framework SDK. 性对应的字段名.type属性是可选的(如果你没有标明,NH会给出一个最适合的),但是推荐的做法是带上这个属性.hibernate用户会注 意到,在type属性值里,我们给出了长度值,这是因为ADO.NET需要这样做. tag的相似.我们从Property(name)映射到目标数据库的字段(colume). 在我们举的例子中,把它设置成"assigned",意思是"我们的对象将自己生成key"(User对象将总是需要一个UserID),如果你乐意让NH代 替你生成,你会对uuid.hex和uuid.string类感兴趣的(参看chm文档). 部分了.后面我们会明白这个步骤的重要性. <configuration> <configSections> <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" /> </configSections> <nhibernate> <add key="hibernate.connection.provider"value="NHibernate.Connection.DriverConnectionProvider" /> <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" /> <add key="hibernate.connection.connection_string" value="Server=localhost;initial catalog=nhibernate;User ID=someuser;Password=somepwd;Min Pool Size=2" /> </nhibernate> </configuration> 档. session = factory.OpenSession(); 20, 0, 0))).List(); |
然后你觉得再也不能这样过了,再也不能这样活了,你开始用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的开发乐趣。
大家想得到这样的乐趣吗?我在网上找到一篇,并总结到了一个文档里

只有本站会员才能查看附件,请 登录
有感兴趣的朋友,就下载吧