我们成功的运行了自己的第一个Spring.NET程序和第一个NHibernate程序。下面我们将上面的程序整合到一个项目中来。让Spring.NET的容器来管理NHibernate。
建立新的项目(SpringNHibernateSample)
项目名称为:SpringNHibernateSample 名字空间:OKEC.Sample
添加NHibernate程序
将NHibernateSample项目的User.cs、User.hbm.xml加入的新的项目中。
并修改User.hbm.xml,将其中的
<class name=" OKEC.Sample.NHibernate.NHibernateTest.User,NHibernateSample"
table="my_users">
改为
<class name=" OKEC.Sample.NHibernate.NHibernateTest.User,SpringNHibernateSample"
table="my_users">
添加Spring.NET的程序
n 首先,需要将SpringSample项目中的HelloTest.cs、Spring_bean.xml、SpringContext.cs加入到新的项目,并修改其中有用到程序集相关的地方。
如将Spring_bean.xml中的:
<object id="Hello" type="OKEC.Sample.Spring.HelloTest,SpringSample" />
改为
<object id="Hello" type="OKEC.Sample.Spring.HelloTest,SpringNHibernateSample" />
n 然后, 添加一个为NHibernate提供DbProvider的实现类,此类实现了Spring.Data.Common.IDbProvider接口,为NHibernate提供DbProvider所需的链接字串(ConnectionString)。
using System;
using Spring.Data.Common;
namespace OKEC.Sample.Spring
{
/// <summary>
/// SQLPriv 的摘要说明。
/// </summary>
public class SQLProvider:IDbProvider
{
public SQLProvider()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
#region IDbProvider 成员
public System.Data.IDbConnection CreateConnection()
{
// TODO: 添加 SQLPriv.CreateConnection 实现
return null;
}
public string CreateParameterName(string name)
{
// TODO: 添加 SQLPriv.CreateParameterName 实现
return null;
}
public System.Data.IDbDataParameter CreateParameter()
{
// TODO: 添加 SQLPriv.CreateParameter 实现
return null;
}
private string _connectionString="";
public string ConnectionString
{
get
{
// TODO: 添加 SQLPriv.ConnectionString getter 实现
return _connectionString;
}
set
{
_connectionString = value;
// TODO: 添加 SQLPriv.ConnectionString setter 实现
}
}
public string ExtractError(Exception e)
{
// TODO: 添加 SQLPriv.ExtractError 实现
return null;
}
public System.Data.IDbDataAdapter CreateDataAdapter()
{
// TODO: 添加 SQLPriv.CreateDataAdapter 实现
return null;
}
public bool IsDataAccessException(Exception e)
{
// TODO: 添加 SQLPriv.IsDataAccessException 实现
return false;
}
public System.Data.IDbCommand CreateCommand()
{
// TODO: 添加 SQLPriv.CreateCommand 实现
return null;
}
public object CreateCommandBuilder()
{
// TODO: 添加 SQLPriv.CreateCommandBuilder 实现
return null;
}
public IDbMetadata DbMetadata
{
get
{
// TODO: 添加 SQLPriv.DbMetadata getter 实现
return null;
}
}
#endregion
}
}
n 最后,添加一个Spring.Data.NHibernate对NHibernate的封装对像,此对像实现对User对像数据操作,继承自
Spring.Data.NHibernate.Support.HibernateDaoSupport。
using System;
using System.Collections;
using Spring.Data.NHibernate.Support;
namespace OKEC.Sample.NHibernate.NHibernateTest
{
/// <summary>
/// UserDao 的摘要说明。
/// </summary>
public class UserDao : HibernateDaoSupport
{
public UserDao()
{ //
// TODO: 在此处添加构造函数逻辑
//
}
public bool SaveObject(User user)
{
HibernateTemplate.Save(user);
return true;
}
public bool DeleteObject(User user)
{
HibernateTemplate.Delete(user);
return true;
}
public bool UpdateObject(User user)
{
HibernateTemplate.Update(user);
return true;
}
public IList GetAllObjectsList()
{
return HibernateTemplate.LoadAll(typeof(User));
}
public User Load(Object ID)
{
return (User)HibernateTemplate.Load(typeof(User),ID);
}
}
建立新的项目(SpringNHibernateSample)
项目名称为:SpringNHibernateSample 名字空间:OKEC.Sample
添加NHibernate程序
将NHibernateSample项目的User.cs、User.hbm.xml加入的新的项目中。
并修改User.hbm.xml,将其中的
<class name=" OKEC.Sample.NHibernate.NHibernateTest.User,NHibernateSample"
table="my_users">
改为
<class name=" OKEC.Sample.NHibernate.NHibernateTest.User,SpringNHibernateSample"
table="my_users">
添加Spring.NET的程序
n 首先,需要将SpringSample项目中的HelloTest.cs、Spring_bean.xml、SpringContext.cs加入到新的项目,并修改其中有用到程序集相关的地方。
如将Spring_bean.xml中的:
<object id="Hello" type="OKEC.Sample.Spring.HelloTest,SpringSample" />
改为
<object id="Hello" type="OKEC.Sample.Spring.HelloTest,SpringNHibernateSample" />
n 然后, 添加一个为NHibernate提供DbProvider的实现类,此类实现了Spring.Data.Common.IDbProvider接口,为NHibernate提供DbProvider所需的链接字串(ConnectionString)。
using System;
using Spring.Data.Common;
namespace OKEC.Sample.Spring
{
/// <summary>
/// SQLPriv 的摘要说明。
/// </summary>
public class SQLProvider:IDbProvider
{
public SQLProvider()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
#region IDbProvider 成员
public System.Data.IDbConnection CreateConnection()
{
// TODO: 添加 SQLPriv.CreateConnection 实现
return null;
}
public string CreateParameterName(string name)
{
// TODO: 添加 SQLPriv.CreateParameterName 实现
return null;
}
public System.Data.IDbDataParameter CreateParameter()
{
// TODO: 添加 SQLPriv.CreateParameter 实现
return null;
}
private string _connectionString="";
public string ConnectionString
{
get
{
// TODO: 添加 SQLPriv.ConnectionString getter 实现
return _connectionString;
}
set
{
_connectionString = value;
// TODO: 添加 SQLPriv.ConnectionString setter 实现
}
}
public string ExtractError(Exception e)
{
// TODO: 添加 SQLPriv.ExtractError 实现
return null;
}
public System.Data.IDbDataAdapter CreateDataAdapter()
{
// TODO: 添加 SQLPriv.CreateDataAdapter 实现
return null;
}
public bool IsDataAccessException(Exception e)
{
// TODO: 添加 SQLPriv.IsDataAccessException 实现
return false;
}
public System.Data.IDbCommand CreateCommand()
{
// TODO: 添加 SQLPriv.CreateCommand 实现
return null;
}
public object CreateCommandBuilder()
{
// TODO: 添加 SQLPriv.CreateCommandBuilder 实现
return null;
}
public IDbMetadata DbMetadata
{
get
{
// TODO: 添加 SQLPriv.DbMetadata getter 实现
return null;
}
}
#endregion
}
}
n 最后,添加一个Spring.Data.NHibernate对NHibernate的封装对像,此对像实现对User对像数据操作,继承自
Spring.Data.NHibernate.Support.HibernateDaoSupport。
using System;
using System.Collections;
using Spring.Data.NHibernate.Support;
namespace OKEC.Sample.NHibernate.NHibernateTest
{
/// <summary>
/// UserDao 的摘要说明。
/// </summary>
public class UserDao : HibernateDaoSupport
{
public UserDao()
{ //
// TODO: 在此处添加构造函数逻辑
//
}
public bool SaveObject(User user)
{
HibernateTemplate.Save(user);
return true;
}
public bool DeleteObject(User user)
{
HibernateTemplate.Delete(user);
return true;
}
public bool UpdateObject(User user)
{
HibernateTemplate.Update(user);
return true;
}
public IList GetAllObjectsList()
{
return HibernateTemplate.LoadAll(typeof(User));
}
public User Load(Object ID)
{
return (User)HibernateTemplate.Load(typeof(User),ID);
}
}
}
本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/archive/2010/12/20/1911846.html,如需转载请自行联系原作者