阅读文章(首页/程序开发/.NET教程/)

Spring.Net + NHibernate 入门例子

[日期:2008-02-20] 来源:  作者: [字体: ]

    
  Spring.Net 是一个很强大的框架,在java里非常的火,NHibernate也是从java里移植过来的.不过和Java下面的用法有所区别.下面我们以一个实例来说说他们在.net下的用法.
  新建一个项目:名字叫SpringHiberate.
  首先,我们修改我们的配置文件web.config:
  <?xml version="1.0" encoding="utf-8"?>
  
  <configuration>
   <configSections>
   <sectionGroup name="spring">
   <section name="context" type="Spring.Context.Support.WebContextHandler, Spring.Web"/>
   <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core"/>
   </sectionGroup>
   <section name="SpringOverrideProperty" type="System.Configuration.NameValueSectionHandler"/>
   <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
   </configSections>
  
   <SpringOverrideProperty>
   <add key="DbProvider.ConnectionString" value="Data Source=192.168.1.21;Database=FastSpring20;User ID=sa;Password=oilchem2007;Trusted_Connection=False"/>
   <add key="SystemInit.IsDebug" value="true"/>
   <add key="SystemInit.Level" value="4"/>
   </SpringOverrideProperty>
  
  
   <!-- Spirng.Net 配置 -->
   <spring>
   <context>
   <resource uri="config://spring/objects"/>
   <resource uri="assembly://SpringHiberate/SpringHiberate/spring_bean_dao.xml"/>
   </context>
   <objects xmlns="http://www.springframework.net"/>
   </spring>
  
   <appSettings/>
  
   <connectionStrings/>
  
   <system.web>
   <compilation debug="true" />
   <authentication mode="Windows" />
  
   <httpModules>
   <add name="Spring" type="Spring.Context.Support.WebSupportModule, Spring.Web"/>
   </httpModules>
  
   <httpHandlers>
   <add verb="*" path="*.aspx" type="Spring.Web.Support.PageHandlerFactory, Spring.Web"/>
   </httpHandlers>
   </system.web>
  </configuration>
  
  然后我们添加一个Model类User.cs:
   1using System;
   2
   3namespace SpringHiberate.dao.model
   4{
   5 public class User
   6 {
   7 private Int32 id;
   8
   9 public Int32 Id
  10 {
  11 get { return id; }
  12 set { id = value; }
  13 }
  14 private string name;
  15
  16 public string Name
  17 {
  18 get { return name; }
  19 set { name = value; }
  20 }
  21 private string email;
  22
  23 public string Email
  24 {
  25 get { return email; }
  26 set { email = value; }
  27 }
  28 }
  29}我们再在User.cs目录里添加一个文件User.hbm.XML,文件的生成操作为嵌入的资源
  <?xml version="1.0" encoding="utf-8" ?>
  <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
   <class name="SpringHiberate.dao.model.User,SpringHiberate" table="FS_User" lazy="false">
   <id name="Id" column="id" type="Int32">
   <generator class="native" />
   </id>
   <property name="Name" column="uname" type="String" length="50" />
   <property name="Email" column="uemail" type="String" length="50" />
   </class>
  </hibernate-mapping>然后我们写一个SQLProvider类SQLProvider.cs.
  using System;
  using System.Data;
  using System.Configuration;
  using System.Web;
  using System.Web.Security;
  using System.Web.UI;
  using System.Web.UI.WebControls;
  using System.Web.UI.WebControls.WebParts;
  using System.Web.UI.HTMLControls;
  using Spring.Data.Common;
  
  namespace SpringHiberate.dao
  {
   public class SQLProvider : IDbProvider
   {
   #region IDbProvider 成员
   private string _connectionString = "";
   public string ConnectionString
   {
   get
   {
   return this._connectionString;
   }
   set
   {
   this._connectionString = value;
   }
   }
  
   public IDbCommand CreateCommand()
   {
   return null;
   }
  
   public object CreateCommandBuilder()
   {
   return null;
   }
  
   public IDbConnection CreateConnection()
   {
   return null;
   }
  
   public IDbDataAdapter CreateDataAdapter()
   {
   return null;
   }
  
   public IDbDataParameter CreateParameter()
   {
   return null;
   }
  
   public string CreateParameterName(string name)
   {
   return null;
   }
  
   public string CreateParameterNameForCollection(string name)
   {
   return null;
   }
  
   public IDbMetadata DbMetadata
   {
   get {
   return null;
   }
   }
  
   public string ExtractError(Exception e)
   {
   return null;
   }
  
   public bool IsDataAccessException(Exception e)
   {
   return false;
   }
  
   #endregion
   }
  }
  在写一个UserDao类(UserDao.cs)来操作 using System;
  using System.Collections;
  using Spring.Data.NHibernate.Support;
  using SpringHiberate.dao.model;
  
  namespace SpringHiberate.dao
  {
   public class UserDao : HibernateDaoSupport
   {
   public void Save(User user)
   {
   HibernateTemplate.Save(user);
   }
  
   public void Delete(User user)
   {
   HibernateTemplate.Delete(user);
   }
  
   public void Update(User user)
   {
   HibernateTemplate.Update(user);
   }
  
   public IList FindAll()
   {
   return HibernateTemplate.LoadAll(typeof(User));
   }
  
   public User Find(Object ID)
   {
   return (User)HibernateTemplate.Load(typeof(User), ID);
   }
   }
  }
  现在代码部分基本写完,我们开始写spring的配置文件(spring_bean_dao.XML),文件的生成操作也为嵌入的资源,他配置了数据库操作以及DAO部分,页面的操作DAO也是依赖注入的
  
  <?xml version="1.0" encoding="utf-8" ?>
  <objects XMLns="http://www.springframework.net"
   XMLns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.springframework.net http://www.springframework.net/xsd/spring-objects.xsd">
  
   <object id="DbProvider" type="SpringHiberate.dao.SQLProvider, SpringHiberate">
   <property name="ConnectionString" value="Data Source=192.168.1.21;Database=FastSpring20;User ID=sa;Password=oilchem2007;Trusted_Connection=False" />
   </object>
  
   <object id="SessionFactory" type="Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate12">
   <property name="DbProvider" ref="DbProvider" />
   <property name="MappingAssemblies">
   <list>
   <value>SpringHiberate</value>
   </list>
   </property>
   <property name="HibernateProperties">
   <dictionary>
   <entry key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
   <entry key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect" />
   <entry key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
   <entry key="show_sql" value="true" />
   </dictionary>
   </property>
   </object>
  
   <object id="HibernateTransactionManager" type="Spring.Data.NHibernate.HibernateTransactionManager, Spring.Data.NHibernate12">
   <property name="DbProvider" ref="DbProvider" />
   <property name="sessionFactory" ref="sessionFactory" />
   </object>
  
   <object id="TransactionInterceptor" type="Spring.Transaction.Interceptor.TransactionInterceptor, Spring.Data">
   <property name="TransactionManager" ref="HibernateTransactionManager" />
   <property name="TransactionAttributeSource">
   <object type="Spring.Transaction.Interceptor.AttributesTransactionAttributeSource, Spring.Data" />
   </property>
   </object>
  
   <object id="UserDao" type="SpringHiberate.dao.UserDao">
   <property name="SessionFactory" ref="SessionFactory" />
   </object>
  
   <object type="~/Default.aspx">
   <property name="UserDao" ref="UserDao" />
   </object>
  </objects>修改Default.ASPx.cs文件里的内容: using System;
  using System.Data;
  using System.Configuration;
  using System.Collections;
  using System.Web;
  using System.Web.Security;
  using System.Web.UI;
  using System.Web.UI.WebControls;
  using System.Web.UI.WebControls.WebParts;
  using System.Web.UI.HTMLControls;
  using SpringHiberate.spring;
  using SpringHiberate.dao;
  
  namespace SpringHiberate
  {
   public partial class _Default : System.Web.UI.Page
   {
   private UserDao userDao;
  
   public UserDao UserDao
   {
   get { return userDao; }
   set { userDao = value; }
   }
  
  
   protected void Page_Load(object sender, EventArgs e)
   {
   Response.Write(hello.Name);
   SpringHiberate.dao.model.User u = new SpringHiberate.dao.model.User();
   u.Name = "safa";
   u.Email = "eicesoft@126.com";
   userDao.Save(u);
   }
   }
  }
  好了,完成了.很简单吧.下面运行一下,然后看看数据库是不是新建了一条数据.
  Spring.Net简化了数据框架NHibernate的操作.对页面进行注入,实现了松耦合.
  Spring.Net远远不止这些.其他的方面在以后的文章中继续介绍
  项目的源码打包:/Files/eicesoft/SpringHiberate.zip
  http://www.cnblogs.com/Files/eicesoft/SpringHiberate.zip  


阅读:
录入:blue1000

评论 】 【 推荐 】 【 打印
上一篇:群发UDP的性能测试
下一篇:设计模式-看 "泡妞之桥梁模式" 随想
相关文章      
本文评论
发表评论


点评: 字数
姓名:

  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款