网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  nhibernate学习入门     
  文章作者:未知  文章来源:水木森林  
  查看:89次  录入:管理员--2007-11-17  
 
1. 学习目的
学习nhibernate基础知识。掌握nhibernate的配置方法,实现对单表的简单操作,如:创建表,查询,添加,删除,修改。
2. 开发环境+前期准备
开发环境: windows 2003,visual studio .net 2005,sql server 2005 developer edition
前期准备: nhibernate框架,我用的目前最新版nhibernate-1.2.0.cr1, 下载地址: http://downloads.sourceforge.net/nhibernate/nhibernate-1.2.0.cr1.msi?modtime=1172161735&big_mirror=0
3. 开发步骤:
1).双击下载下来的nhibernate-1.2.0.cr1.msi,将其安装到某个目录,我的目录为: e:/download project/orm/nhibernate.,打开该目录,即可以看到bin,doc,src三个子目录,分别为realse好的dll或者exe目录,文档说明目录,和源程序目录.
2).打开visual studio 2005,创建类库项目nhibernatesample1
3).在解决方案管理其中,右键点击引用-添加引用,在选项卡种选择浏览,设定查找范围为:e:/download project/orm/nhibernate/bin,添加对nhibernate.dll,log4net.dll, iesi.collections, hashcodeprovider四个dll的引用.
4).打开sql server management studio,创建数据库nhibernate。
5).在解决方案管理器中添加hibernate.cfg.xml文件。将下面代码粘贴到此文件:
<?xml version="1.0" encoding="utf-8" ?><hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" ><session-factory name="nhibernate.test"><!-- properties --><property name="connection.provider">nhibernate.connection.driverconnectionprovider</property><property name="connection.driver_class">nhibernate.driver.sqlclientdriver</property><property name="connection.connection_string">server=127.0.0.1;initial catalog=nhibernate;uid=sa;pwd=123;</property><property name="show_sql">false</property><property name="dialect">nhibernate.dialect.mssql2005dialect</property><property name="use_outer_join">true</property><!-- mapping files --><mapping assembly="nhibernatesample1" /></session-factory></hibernate-configuration>
    该文件是nhibernate的配置文件,其中connection.connection_string为数据库连接字符串,dialect项因为我用的是sql2005,所以为:mssql2005dialect注意:<mapping assembly=”nhibernatesample1”/>表示映射nhibernatesample1程序集下的所有类,所以以后不要需要configuration.addclass(..)了;

6).添加类文件:user.cs,添加代码:
using system;using system.collections.generic;using system.text;namespace nhibernatesample1{public class user{private int _id;private string _name;private string _pwd;/**//// <summary>/// 编号/// </summary> public virtual int id{get{return _id;}set{_id = value;}}/**//// <summary>/// 名称/// </summary> public virtual string name{get{return _name;}set{_name = value;}}/**//// <summary>/// 密码/// </summary> public virtual string pwd{get{return _pwd;}set{_pwd = value;}}}}


6).编写user类的映射配置文件:user.hbm.xml

<?xml version="1.0" encoding="utf-8" ?><hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"><class name="nhibernatesample1.user,nhibernatesample1" table="users" lazy="false"><id name="id" column="id" unsaved-value="0"><generator class="native" /></id><property name="name" column="name" type="string" length="64" not-null="true" unique="true"></property><property name="pwd" column="pwd" type="string" length="64" not-null="true"></property></class></hibernate-mapping>


注意:该映射文件的属性中的生成操作必须为:嵌入的资源.

7).编写管理isession对象的辅助类: nhibernatehelper.cs,代码为:

using system;using system.web;using nhibernate;using nhibernate.cfg;namespace nhibernatesample1...{public sealed class nhibernatehelper...{private static readonly isessionfactory sessionfactory;static nhibernatehelper()...{sessionfactory = new configuration().configure(@"e:/my project/nhibernate study/simle 1/nhibernatestudy1/nhibernatesample1/hibernate.cfg.xml").buildsessionfactory();}public static isession getcurrentsession()...{isession currentsession = sessionfactory.opensession();return currentsession;}public static void closesessionfactory()...{if (sessionfactory != null)...{sessionfactory.close();}}}}

注:因为我用的是单元测试,所以这里的配置文件路径写成固定的了。如果换成windows或者web程序,可以直接去掉该路径。

8) 编写测试crud类:userfixue

using system;using system.collections.generic;using system.text;using nhibernate;using nhibernate.cfg;using nhibernate.tool.hbm2ddl;namespace nhibernatesample1{public class userfixure{private isession session;public userfixure(){}/**//// <summary>/// 创建表/// </summary> public bool exporttable(){try{configuration cfg = new configuration().configure(@"e:/my project/nhibernate study/simle 1/nhibernatestudy1/nhibernatesample1/hibernate.cfg.xml");session = nhibernatehelper.getcurrentsession();itransaction transaction = session.begintransaction();new schemaexport(cfg).create(true, true);transaction.commit();return true;}catch(exception ex){throw ex;}finally{session.close();}}/**//// <summary>/// 添加/// </summary> public int add(){try{user u = new user();u.name = guid.newguid().tostring();u.pwd = "124";session = nhibernatehelper.getcurrentsession();itransaction transaction = session.begintransaction();session.save(u);transaction.commit();return u.id;}catch (exception ex){throw ex;}finally{session.close();}}/**//// <summary>/// 更新/// </summary>/// <param name="uid"></param> public bool update(int uid){try{session = nhibernatehelper.getcurrentsession();itransaction transaction = session.begintransaction();user u = session.load(typeof(user), uid) as user;if (u != null){u.name = "updatedname";session.saveorupdate(u);transaction.commit();u = session.load(typeof(user), uid) as user;if (u.name == "updatedname"){return true;}}return false;}catch (exception ex){throw ex;}finally{session.close();}}/**//// <summary>/// 删除/// </summary>/// <param name="uid"></param>/// <returns></returns> public bool delete(int uid){try{session = nhibernatehelper.getcurrentsession();itransaction transaction = session.begintransaction();user u = session.get(typeof(user), uid) as user;if (u != null){session.delete(u);transaction.commit();u = session.get(typeof(user), uid) as user;if (u == null){return true;}}return false;}catch (exception ex){throw ex;}finally{session.close();}}public system.collections.ilist query(){try{session = nhibernatehelper.getcurrentsession();itransaction transaction = session.begintransaction();system.collections.ilist list= session.createquery("select u from user as u").list();transaction.commit();return list;}catch (exception ex){throw ex;}finally{session.close();}}}}

9)创建新单元测试项目: testproject1,添加nhibernatesample1的引用
10)创建单元测试类: unittest1.cs,并输入如下代码:

using system;using system.text;using system.collections.generic;using microsoft.visualstudio.testtools.unittesting;using nhibernatesample1;namespace testproject1{/**//// <summary>/// unittest1 的摘要说明/// </summary> [testclass]public class unittest1{public unittest1(){//// todo: 在此处添加构造函数逻辑// }其他测试属性#region 其他测试属性 //// 您可以在编写测试时使用下列其他属性://// 在运行类中的第一个测试之前使用 classinitialize 运行代码// [classinitialize()]// public static void myclassinitialize(testcontext testcontext) { }//// 在类中的所有测试都已运行之后使用 classcleanup 运行代码// [classcleanup()]// public static void myclasscleanup() { }//// 在运行每个测试之前使用 testinitialize 运行代码// [testinitialize()]// public void mytestinitialize() { }//// 在运行每个测试之后使用 testcleanup 运行代码// [testcleanup()]// public void mytestcleanup() { }// #endregion int uid;[testmethod]public void testmethod1(){userfixure userfixure = new userfixure();assert.istrue(userfixure.exporttable());}[testmethod]public void testmethod2(){userfixure userfixure = new userfixure();uid = userfixure.add();assert.istrue(uid>0);}[testmethod]public void testmethod3(){userfixure userfixure = new userfixure();assert.istrue(userfixure.update(uid));}[testmethod]public void testmethod4(){userfixure userfixure = new userfixure();assert.istrue(userfixure.delete(uid));}[testmethod]public void testmethod5(){userfixure userfixure = new userfixure();assert.istrue(userfixure.query().count>0);}}}


11)在菜单-测试-加载元数据文件 选择nhibernatestudy1.vsmdi,然后按顺序执行testmethod1-testmethod5,全部成功!

4.总结
  通过使用nhibernate,基本上可以使开发人员不在接触繁琐的数据库表和数据库操作代码,您唯一需要关心的就是如何设计好类,让这些类满足您的业务需求。从扩展性来说nhinernate具有非常好的扩展性。与代码生成比较,nhibernate更改数据表结构对代码的影响要远远小于代码生成。

 
 
上一篇: nhibernate性能之二级缓存篇    下一篇: nhibernate学习之起步篇
  相关文档
java教室: garbage collection 清除物件的顺序 11-17
310-025 braindumps 11-17
搜索引擎之中文分词实现(java版) 11-17
java中图片文件的缩放 11-17
java2源码解读:java.util.arraylist 11-17
netinstallsunos 11-16
java中处理连续多个空格 11-17
2006年java开发技术回顾与展望 11-17
java编程新手入门:运算符优先级(图表) 06-10
模式:通过Java Swing看透MVC设计模式 08-06
beans入门必读之状态会话bean基础 11-17
.net实现的农历功能及其代码分享 11-17
彻底研究 java 中的正则表达式 11-17
identity列的检查指定表的当前标识值 11-17
带着我的认证上路:一年甘苦为java 11-17
javascript实例教程(20) ole automation(3) 11-16
java基础:垃圾收集器与java程序的性能 11-16
java gui:java布局管理器使用方法探讨 02-28
javabean与ejb有何不同 11-16
应用系统性能管理的五个步骤 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息