Nhibernate学习之起步篇-1

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
7).编写管理ISession对象的辅助类: NHibernateHelper.cs,代码为:
<? 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 >
  注意:该映射文件的属性中的生成操作必须为:嵌入的资源.

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(truetrue);
                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: 在此处添加构造函数逻辑
            
//
        }


        
其他测试属性

        
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更改数据表结构对代码的影响要远远小于代码生成。
如果您想下载Demo:/Files/jillzhang/simle.rar
 
内容概要:该PPT详细介绍了企业架构设计的方法论,涵盖业务架构、数据架构、应用架构和技术架构四大核心模块。首先分析了企业架构现状,包括业务、数据、应用和技术四大架构的内容和关系,明确了企业架构设计的重要性。接着,阐述了新版企业架构总体框架(CSG-EAF 2.0)的形成过程,强调其融合了传统架构设计(TOGAF)和领域驱动设计(DDD)的优势,以适应数字化转型需求。业务架构部分通过梳理企业级和专业级价值流,细化业务能力、流程和对象,确保业务战略的有效落地。数据架构部分则遵循五大原则,确保数据的准确、一致和高效使用。应用架构方面,提出了分层解耦和服务化的设计原则,以提高灵活性和响应速度。最后,技术架构部分围绕技术框架、组件、平台和部署节点进行了详细设计,确保技术架构的稳定性和扩展性。 适合人群:适用于具有一定企业架构设计经验的IT架构师、项目经理和业务分析师,特别是那些希望深入了解如何将企业架构设计与数字化转型相结合的专业人士。 使用场景及目标:①帮助企业和组织梳理业务流程,优化业务能力,实现战略目标;②指导数据管理和应用开发,确保数据的一致性和应用的高效性;③为技术选型和系统部署提供科学依据,确保技术架构的稳定性和扩展性。 阅读建议:此资源内容详尽,涵盖企业架构设计的各个方面。建议读者在学习过程中,结合实际案例进行理解和实践,重点关注各架构模块之间的关联和协同,以便更好地应用于实际工作中。
资 源 简 介 独立分量分析(Independent Component Analysis,简称ICA)是近二十年来逐渐发展起来的一种盲信号分离方法。它是一种统计方法,其目的是从由传感器收集到的混合信号中分离相互独立的源信号,使得这些分离出来的源信号之间尽可能独立。它在语音识别、电信和医学信号处理等信号处理方面有着广泛的应用,目前已成为盲信号处理,人工神经网络等研究领域中的一个研究热点。本文简要的阐述了ICA的发展、应用和现状,详细地论述了ICA的原理及实现过程,系统地介绍了目前几种主要ICA算法以及它们之间的内在联系, 详 情 说 明 独立分量分析(Independent Component Analysis,简称ICA)是近二十年来逐渐发展起来的一种盲信号分离方法。它是一种统计方法,其目的是从由传感器收集到的混合信号中分离相互独立的源信号,使得这些分离出来的源信号之间尽可能独立。它在语音识别、电信和医学信号处理等信号处理方面有着广泛的应用,目前已成为盲信号处理,人工神经网络等研究领域中的一个研究热点。 本文简要的阐述了ICA的发展、应用和现状,详细地论述了ICA的原理及实现过程,系统地介绍了目前几种主要ICA算法以及它们之间的内在联系,在此基础上重点分析了一种快速ICA实现算法一FastICA。物质的非线性荧光谱信号可以看成是由多个相互独立的源信号组合成的混合信号,而这些独立的源信号可以看成是光谱的特征信号。为了更好的了解光谱信号的特征,本文利用独立分量分析的思想和方法,提出了利用FastICA算法提取光谱信号的特征的方案,并进行了详细的仿真实验。 此外,我们还进行了进一步的研究,探索了其他可能的ICA应用领域,如音乐信号处理、图像处理以及金融数据分析等。通过在这些领域中的实验和应用,我们发现ICA在提取信号特征、降噪和信号分离等方面具有广泛的潜力和应用前景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值