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

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 福娃

Ubuntu 16.04 LTS更新 程序员如何走出迷茫的困境? PHP vs Python Apache2.4中开通HTTP基本认证 NPM 与 left-pad 事件:我们是不是早已忘记该如何好好地编程? Groovy split竖杆注意 使用Flask-Migrate进行管理数据库升级 Fabric自动部署太方便了 程序员的复仇:11行代码如何让Node.js社区鸡飞狗跳 CAS认证原理图 grails 私有库相关设置 A successful Git branching model String to Date 多种格式转换 [django]the story about Django and TurboGears [django]newforms两种方式示例 Since NHibernate 1.2.0, objects are lazy by default - 福娃 [Castle]Castle.Model被Castle.Core代替了 [Castle]Castle也范型 - 福娃 - 博客园 [Castle]Asp.Net中获取Castle容器中的服务的另一方法
IBatis.Net如何支持多个数据库
福娃 · 2007-10-23 · via 博客园 - 福娃

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

在Ibatis.net的帮助文档中有介绍多数据库支持,但是没有写全代码,后来查看其源码,并结合帮助文档,找到了解决方法,其实道理就是另行实现一个Mapper.如AnthorMapper:

Apache Notice    
   
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    
   
        
/// <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);    
}