原文: http://www.maplye.com:8081/post/114/
在Ibatis.net的幫助文檔中有介紹多資料庫支援,但是沒有寫全代碼,後來檢視其源碼,并結合幫助文檔,找到了解決方法,其實道理就是另行實作一個Mapper.如AnthorMapper:
Apache Notice #region Apache Notice
#endregion
using IBatisNet.Common.Utilities;
using IBatisNet.DataMapper;
using IBatisNet.DataMapper.Configuration;
namespace IBatisNet.DataMapper
{
/// <summary>
/// A singleton class to access the default SqlMapper defined by the SqlMap.Config
/// </summary>
public sealed class AnthorMapper
{
Fields#region Fields
private static volatile ISqlMapper _mapper = null;
#endregion
/// <summary>
///
/// </summary>
/// <param name="obj"></param>
public static void Configure (object obj)
{
_mapper = null;
}
/// <summary>
/// Init the 'default' SqlMapper defined by the SqlMap.Config file.
/// </summary>
public static void InitMapper()
{
ConfigureHandler handler = new ConfigureHandler (Configure);
DomSqlMapBuilder builder = new DomSqlMapBuilder();
_mapper = builder.ConfigureAndWatch ("AnthorMap.config",handler); }
/// <summary>
/// Get the instance of the SqlMapper defined by the SqlMap.Config file.
/// </summary>
/// <returns>A SqlMapper initalized via the SqlMap.Config file.</returns>
public static ISqlMapper Instance()
{
if (_mapper == null)
{
lock (typeof (SqlMapper))
{
if (_mapper == null) // double-check
{
InitMapper();
}
}
}
return _mapper;
}
/// <summary>
/// Get the instance of the SqlMapper defined by the SqlMap.Config file. (Convenience form of Instance method.)
/// </summary>
/// <returns>A SqlMapper initalized via the SqlMap.Config file.</returns>
public static ISqlMapper Get()
{
return Instance();
}
}
} 以上代碼隻是修改了IBatis.net中的Mapper的代碼,将_mapper = builder.ConfigureAndWatch (handler);修改為_mapper = builder.ConfigureAndWatch ("AnthorMap.config",handler),就是根據另一個AnthorMap.config檔案來生成SqlMapper。
AnthorMap.config和預設的SqlMap.config一樣,隻是根據你的資料不同設定不同而已,測試AnthorMap.config如下如下:
<? xml version="1.0" encoding="utf-8" ?>
< sqlMapConfig
xmlns ="http://ibatis.apache.org/dataMapper"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" >
< settings >
< setting useStatementNamespaces ="true" />
</ settings >
< providers resource ="ServerConfig/providers.config" />
<!-- Database connection information -->
< database >
< provider name ="sqlServer2.0" />
< dataSource name ="CrmSystem" connectionString ="server=.;database=TestDB;uid=sa;pwd=" />
</ database >
< sqlMaps >
< sqlMap embedded ="Test.Domain.Weather.xml,Test.Domain" />
</ sqlMaps >
</ sqlMapConfig > 接下來就可以使用AntherMapper來建立ISqlMapper了。如下:
public IList < Weather > GetWeather()
{
ISqlMapper map = AnthorMapper.Instance();
return map.QueryForList<Weather>("Weather.Select", null);
}