服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

nhibernate学习之起步篇


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文件。将下面代码粘贴到此文件: 

nhibernate学习之起步篇(图一)<?xml version="1.0" encoding="utf-8" ?>
nhibernate学习之起步篇(图一)<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
nhibernate学习之起步篇(图一)    <session-factory name="nhibernate.test">
nhibernate学习之起步篇(图一)        <!-- properties -->
nhibernate学习之起步篇(图一)        <property name="connection.provider">nhibernate.connection.driverconnectionprovider</property>
nhibernate学习之起步篇(图一)        <property name="connection.driver_class">nhibernate.driver.sqlclientdriver</property>
nhibernate学习之起步篇(图一)        <property name="connection.connection_string">server=127.0.0.1;initial catalog=nhibernate;uid=sa;pwd=123;</property>
nhibernate学习之起步篇(图一)        <property name="show_sql">false</property>
nhibernate学习之起步篇(图一)        <property name="dialect">nhibernate.dialect.mssql2005dialect</property>
nhibernate学习之起步篇(图一)        <property name="use_outer_join">true</property>
nhibernate学习之起步篇(图一)        <!-- mapping files -->
nhibernate学习之起步篇(图一)        <mapping assembly="nhibernatesample1" />
nhibernate学习之起步篇(图一)    </session-factory>    
nhibernate学习之起步篇(图一)</hibernate-configuration>
nhibernate学习之起步篇(图一)

 该文件是nhibernate的配置文件,其中connection.connection_string为数据库连接字符串,dialect项因为我用的是sql2005,所以为:mssql2005dialect注意:<mapping assembly=”nhibernatesample1”/>表示映射nhibernatesample1程序集下的所有类,所以以后不要需要configuration.addclass(..)了;

6).添加类文件:user.cs,添加代码: 

nhibernate学习之起步篇(图一)using system;
nhibernate学习之起步篇(图一)using system.collections.generic;
nhibernate学习之起步篇(图一)using system.text;
nhibernate学习之起步篇(图一)
nhibernate学习之起步篇(图一)namespace nhibernatesample1
nhibernate学习之起步篇(图二)nhibernate学习之起步篇(图三)nhibernate学习之起步篇(图四){
nhibernate学习之起步篇(图五)    public class user
nhibernate学习之起步篇(图六)nhibernate学习之起步篇(图七)    nhibernate学习之起步篇(图四){
nhibernate学习之起步篇(图五)        private int _id;
nhibernate学习之起步篇(图五)        private string _name;
nhibernate学习之起步篇(图五)        private string _pwd;
nhibernate学习之起步篇(图六)nhibernate学习之起步篇(图七)        /**//// <summary>
nhibernate学习之起步篇(图五)        /// 编号
nhibernate学习之起步篇(图八)        /// </summary>
nhibernate学习之起步篇(图五)        public virtual int id
nhibernate学习之起步篇(图六)nhibernate学习之起步篇(图七)        nhibernate学习之起步篇(图四){
nhibernate学习之起步篇(图五)            get
nhibernate学习之起步篇(图六)nhibernate学习之起步篇(图七)            nhibernate学习之起步篇(图四){
nhibernate学习之起步篇(图五)                return _id;
nhibernate学习之起步篇(图八)            }
nhibernate学习之起步篇(图五)            set
nhibernate学习之起步篇(图六)nhibernate学习之起步篇(图七)            nhibernate学习之起步篇(图四){
nhibernate学习之起步篇(图五)                _id = value;
nhibernate学习之起步篇(图八)            }
nhibernate学习之起步篇(图八)        }
nhibernate学习之起步篇(图五)
nhibernate学习之起步篇(图六)nhibernate学习之起步篇(图七)        /**//// <summary>
nhibernate学习之起步篇(图五)        /// 名称
nhibernate学习之起步篇(图八)        /// </summary>
nhibernate学习之起步篇(图五)        public virtual string name
nhibernate学习之起步篇(图六)nhibernate学习之起步篇(图七)        nhibernate学习之起步篇(图四){
nhibernate学习之起步篇(图五)            get
nhibernate学习之起步篇(图六)nhibernate学习之起步篇(图七)            nhibernate学习之起步篇(图四){
nhibernate学习之起步篇(图五)                return _name;
nhibernate学习之起步篇(图八)            }
nhibernate学习之起步篇(图五)            set
nhibernate学习之起步篇(图六)nhibernate学习之起步篇(图七)            nhibernate学习之起步篇(图四){
nhibernate学习之起步篇(图五)                _name = value;
nhibernate学习之起步篇(图八)            }
nhibernate学习之起步篇(图八)        }
nhibernate学习之起步篇(图五)
nhibernate学习之起步篇(图六)nhibernate学习之起步篇(图七)        /**//// <summary>
nhibernate学习之起步篇(图五)        /// 密码
nhibernate学习之起步篇(图八)        /// </summary>
nhibernate学习之起步篇(图五)        public virtual string pwd
nhibernate学习之起步篇(图六)nhibernate学习之起步篇(图七)        nhibernate学习之起步篇(图四){
nhibernate学习之起步篇(图五)            get
nhibernate学习之起步篇(图六)nhibernate学习之起步篇(图七)            nhibernate学习之起步篇(图四){
nhibernate学习之起步篇(图五)                return _pwd;
nhibernate学习之起步篇(图八)            }
nhibernate学习之起步篇(图五)            set
nhibernate学习之起步篇(图六)nhibernate学习之起步篇(图七)            nhibernate学习之起步篇(图四){
nhibernate学习之起步篇(图五)                _pwd = value;
nhibernate学习之起步篇(图八)            }
nhibernate学习之起步篇(图八)        }
nhibernate学习之起步篇(图八)    }
nhibernate学习之起步篇(图九)}
nhibernate学习之起步篇(图一)

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

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

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

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

nhibernate学习之起步篇(图一)
nhibernate学习之起步篇(图一)using system;
nhibernate学习之起步篇(图一)using system.web;
nhibernate学习之起步篇(图一)using nhibernate;
nhibernate学习之起步篇(图一)using nhibernate.cfg;
nhibernate学习之起步篇(图一)
nhibernate学习之起步篇(图一)namespace nhibernatesample1
nhibernate学习之起步篇(图二)nhibernate学习之起步篇(图三)nhibernate学习之起步篇(图四){
nhibernate学习之起步篇(图五)    public sealed class nhibernatehelper
nhibernate学习之起步篇(图六)nhibernate学习之起步篇(图七)    nhibernate学习之起步篇(图四){
nhibernate学习之起步篇(图五)        private static readonly isessionfactory sessionfactory;
nhibernate学习之起步篇(图五)
nhibernate学习之起步篇(图五)        static nhibernatehelper()
nhibernate学习之起步篇(图六)nhibernate学习之起步篇(图七)        nhibernate学习之起步篇(图四){
nhibernate学习之起步篇(图五)            sessionfactory = new configuration().configure(@"e:/my project/nhibernate study/simle 1/nhibernatestudy1/nhibernatesample1/hibernate.cfg.xml").buildsessionfactory();
nhibernate学习之起步篇(图八)        }
nhibernate学习之起步篇(图五)
nhibernate学习之起步篇(图五)        public static isession getcurrentsession()
nhibernate学习之起步篇(图六)nhibernate学习之起步篇(图七)        nhibernate学习之起步篇(图四){             
nhibernate学习之起步篇(图五)            isession currentsession = sessionfactory.opensession();
nhibernate学习之起步篇(图五)            return currentsession;
nhibernate学习之起步篇(图八)        }
nhibernate学习之起步篇(图五)
nhibernate学习之起步篇(图五)        public static void closesessionfactory()
nhibernate学习之起步篇(图六)nhibernate学习之起步篇(图七)        nhibernate学习之起步篇(图四){
nhibernate学习之起步篇(图五)            if (sessionfactory != null)
nhibernate学习之起步篇(图六)nhibernate学习之起步篇(图七)            nhibernate学习之起步篇(图四){
nhibernate学习之起步篇(图五)                sessionfactory.close();
nhibernate学习之起步篇(图八)            }
nhibernate学习之起步篇(图八)        }
nhibernate学习之起步篇(图八)    }
nhibernate学习之起步篇(图九)}
nhibernate学习之起步篇(图一)
注:因为我用的是单元测试,所以这里的配置文件路径写成固定的了。如果换成windows或者web程序,可以直接去掉该路径。

8) 编写测试crud类:userfixue

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