惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Security Latest
Security Latest
Recorded Future
Recorded Future
人人都是产品经理
人人都是产品经理
S
SegmentFault 最新的问题
Hacker News - Newest:
Hacker News - Newest: "LLM"
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园 - 三生石上(FineUI控件)
博客园 - 聂微东
P
Privacy & Cybersecurity Law Blog
WordPress大学
WordPress大学
Know Your Adversary
Know Your Adversary
Spread Privacy
Spread Privacy
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
量子位
L
LINUX DO - 热门话题
L
Lohrmann on Cybersecurity
博客园 - Franky
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tor Project blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
雷峰网
雷峰网
阮一峰的网络日志
阮一峰的网络日志
V
Visual Studio Blog
T
Threatpost
T
Tenable Blog
有赞技术团队
有赞技术团队
大猫的无限游戏
大猫的无限游戏
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI
C
Cisco Blogs
H
Heimdal Security Blog
Attack and Defense Labs
Attack and Defense Labs
A
About on SuperTechFans
Last Week in AI
Last Week in AI
N
News and Events Feed by Topic
T
Threat Research - Cisco Blogs
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
I
Intezer
V
V2EX
Cyberwarzone
Cyberwarzone
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
B
Blog RSS Feed
V
Vulnerabilities – Threatpost
N
Netflix TechBlog - Medium
T
The Blog of Author Tim Ferriss
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
U
Unit 42
PCI Perspectives
PCI Perspectives
P
Privacy International News Feed
D
Docker

博客园 - 雨中流泪

轻量的PHP开发框架--- litePhp Rails 命令大全 ObjectHTML Framework 0.0.9.1 for PHP 发布.欢迎试用 在学习中沉沦... 在Dom4j中使用xpath - 雨中流泪 - 博客园 使用Spring 2.5 和 Hibernate 3.2 开发MVC Web程序(基于annotation特性) PHP函数收藏---不断更新中! - 雨中流泪 - 博客园 程序员的编辑器--EmEditor 自己写的一个JS组件,JCombo 0.9 - 雨中流泪 - 博客园 Enterprise Library 3.1的研究之路---Data Access Application Block(1) 发个"违法"的东西.VisualAssist X 1559破解版 自己写的Log日志记录类,支持文件和数据库,自动建立Log表格 (三)AJAXPro之旅---原理的探究 - 雨中流泪 - 博客园 (二)AJAXPro之旅---构造实际的AJAX应用. (一)AJAXPro之旅---神奇的小魔盒 Windows Live Writer 我的AJAX类的使用(一个简单的异步组件) Grove,.Net下最方便的O/R Map库 ASP.Net分页组件1.0开发下载了...
Spring.Net + NHibernate 入门例子 - 雨中流泪
雨中流泪 · 2008-02-19 · via 博客园 - 雨中流泪

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