我想从应用程序更改SqlMapConfig.xml文件中的数据库名称,有没有人帮助我?
答案 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"]
等的位可能需要更改你的配置文件)
希望有所帮助。