IBatis.Net如何支持多個數據庫

原文:http://www.maplye.com:8081/post/114/

在Ibatis.net的幫助文檔中有介紹多數據庫支持,但是沒有寫全代碼,後來查看其源碼,並結合幫助文檔,找到了解決方法,其實道理就是另行實現一個Mapper.如AnthorMapper:
Apache Notice#region Apache Notice    
/**//*****************************************************************************   
 * $Header: $   
 * $Revision: 513429 $   
 * $Date: 2007-03-02 02:32:25 +0800 (星期五, 02 三月 2007) $   
 *    
 * iBATIS.NET Data Mapper   
 * Copyright (C) 2004 - Gilles Bayon   
 *     
 *    
 * Licensed under the Apache License, Version 2.0 (the "License");   
 * you may not use this file except in compliance with the License.   
 * You may obtain a copy of the License at   
 *    
 *      
http://www.apache.org/licenses/LICENSE-2.0   
 *    
 * Unless required by applicable law or agreed to in writing, software   
 * distributed under the License is distributed on an "AS IS" BASIS,   
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   
 * See the License for the specific language governing permissions and   
 * limitations under the License.   
 *    
 *******************************************************************************
*/
  
#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);    
}
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章