动态更改SqlMapConfig.xml文件中的数据库名称

时间:2014-02-21 05:23:28

标签: ibatis sqlmap

我想从应用程序更改SqlMapConfig.xml文件中的数据库名称,有没有人帮助我?

1 个答案:

答案 0 :(得分:0)

您可以在实例化Ibatis映射器实例时覆盖数据库;我这样做是为了在应用程序的调试和发布版本之间切换,从而访问不同的目标数据库。

例如,如果您的xml文件位于名为DatalayerAssembly的程序集中,则可能有一种方法可以根据数据库名称返回新的Ibatis实例:

public IBatisNet.DataMapper.ISqlMapper CreateNewIbatis(
    String serverName,
    String databaseName)
{
    // Load the config file (embedded resource in assembly).
    System.Xml.XmlDocument xmlDoc = IBatisNet.Common.Utilities.Resources.GetEmbeddedResourceAsXmlDocument("SqlMapConfig.xml, DatalayerAssembly");

    // Overwrite the connectionString in the XmlDocument, hence changing database.
    // NB if your connection string needs extra parameters,
    // such as `Integrated Security=SSPI;` for user authentication,
    // then append that to InnerText too.
    xmlDoc["sqlMapConfig"]["database"]["dataSource"]
        .Attributes["connectionString"]
        .InnerText = "Server=" + serverName + ";Database=" + databaseName;

    // Instantiate Ibatis mapper using the XmlDocument via a Builder,
    // instead of Ibatis using the config file.
    IBatisNet.DataMapper.Configuration.DomSqlMapBuilder builder = new IBatisNet.DataMapper.Configuration.DomSqlMapBuilder();
    IBatisNet.DataMapper.ISqlMapper ibatisInstance = builder.Configure(xmlDoc);

    // Now use the ISqlMapper instance ("ibatisInstance") as normal.
    return ibatisInstance;
}

我在.Net上的Ibatis 1.6.2.0中使用这种方法,但确切的SqlMap配置文件可能因版本而异。这两种方法都是一样的;你可能只需要一个不同的Xml路径(即读取["sqlMapConfig"]["database"]等的位可能需要更改你的配置文件)

希望有所帮助。