IBatis.net——实例化SqlMapper的几种方式

时间:2022-12-25 16:52:55

IBatis.net作为一个Data Mapper 框架,SqlMapper类就是应用程序跟它打交道的核心。如何从配置文件中实例化SqlMapper类,有以下几种方式。并加以区别,请根据实际情况选择合适的方式进行编码。

 

方式一:代码如下,DomSqlMapBuilder对象在默认项目类型目录下(如果不指定目录的话)查找SqlMap.config文件(如果不指定config文件的话), DomSqlMapBuilder.ConfigureAndWatch() 方法监视配置文件的变动. 一旦配置文件(config和Sql map文件)更改,  SqlMapper 实例将重新安全加载.  这在开发中尤其有用, 当你在启动调试的测试中,改变data map 文件可以立即看到结果,而不需求从新启动调试。同样,在生产环境中,可以更改这些配置,而不需要重新加载应用程序的其他部分。

 配置文件路径:

1,使用相对路径,即相对于应用程序根目录。 

2,放在应用程序根根目录。 根据项目类型不同而不同,就是Web.config或app.config所目录。如果是建立单独的测试项目,就要放在编译目录,为什么是编译目录,因为DomSqlMapBuilder对象是在编译目录下查找配置文件,如果你不知道编译目录在哪里。那就把配置文件放置在根目录下,或者根目录下任何一个文件夹里,并把配置文件的属性设置为“始终复制”或“如果较新则复制”。编译时会自动把配置文件复制到编译根目录。

3,使用绝对路径,该路径可以配在应用程序的配置文件中,通过代码读取,部署方便。

注意:使用 DomSqlMapBuilder.ConfigureAndWatch() ,必须设置应该程序有权限访问跟踪配置文件的更改。

 1           protected   static   void  Configure( object  obj)
 2          {
 3              _mapper  =   null ;
 4          }
 5 
 6           protected   static   void  InitMapper()
 7          {
 8              ConfigureHandler handler  =   new  ConfigureHandler(Configure);
 9              DomSqlMapBuilder builder  =   new  DomSqlMapBuilder();
10              _mapper  =  builder.ConfigureAndWatch( " http://www.cnblogs.com/Config/SqlMap_Oracle_OracleClient.config " , handler);
11          }

 DomSqlMapBuilder.ConfigureAndWatch()方法有三个重载,由于需要监视文件的更改,只能通过文件系统来获取SqlMap.config 文件. 所以只能用以下三个方法。这就是为什么只用三个重载的原因。

 1  /*  Configure and monitor the configuration file for modifications 
 2     and automatically reconfigure the SqlMapper. 
 3     This basic ConfigureAndWatch method looks for a file with the 
 4     default name of SqlMap.config in the application root directory.  */
 5  public  ISqlMapper ConfigureAndWatch(ConfigureHandler configureDelegate)
 6 
 7  /*  Configure and monitor the configuration file for modifications 
 8     and automatically reconfigure the SqlMapper. 
 9     Uses a relative path from your application root 
10     or an absolute file path such as "file:\\c:\dir\a.config"  */
11  public  ISqlMapper ConfigureAndWatch(  string  resource, ConfigureHandler configureDelegate )
12 
13  /*  Configure and monitor the configuration file for modifications 
14     and automatically reconfigure the SqlMapper. 
15     Uses a FileInfo instance for your config file.  */
16  public  ISqlMapper ConfigureAndWatch( FileInfo resource, ConfigureHandler configureDelegate )

 

 

 方式二:代码如如下,调用DomSqlMapBuilder.Configure() 方法,将在应该用程序根目录下查找文件名为SqlMap.config的文件.根目录随项目类型不同而不同,通常是放 web.config 或app.config 文件的目录.该方式不监视配置文件的变化,所以没有方式一的优势。配置文件的路径同方式一。 

 1           private   static   void  InitMapper()
 2          {
 3               // ConfigureHandler hander = new ConfigureHandler(Configure);
 4               // DomSqlMapBuilder builder = new DomSqlMapBuilder();
 5               // _mapper = builder.ConfigureAndWatch("SybaseSqlMap.config", hander);
 6 
 7               // don't need ConfigureHandler class
 8              DomSqlMapBuilder builder  =   new  DomSqlMapBuilder();
 9              _mapper  =  builder.Configure(ConfigurationSettings.AppSettings[ " rootPath " +   " SqlMap_Sybase_Odbc.config " );
10          }

 DomSqlMapBuilder.Configure() 方法有六个重载:

 1  /* Configure s SqlMapper with the default SqlMap.config */
 2  ISqlMapper mapper  =  builder.Configure();
 3 
 4  /* Configure s SqlMapper with the specified SqlMap.config */
 5  mapper  =  builder.Configure(
 6           ConfigurationSettings.AppSettings[ " rootPath " ] + " SqlMap.config " );
 7 
 8 
 9  /*  Configure a SqlMapper with FileInfo.  */
10  FileInfo aFileInfo  =  someSupportClass.GetDynamicFileInfo();
11  ISqlMapper mapper  =  builder.Configure(aFileInfo);
12 
13  /*  Configure a SqlMapper through a Uri.  */
14  Uri aUri  =  someSupportClass.GetDynamicUri();
15  ISqlMapper anotherMapper  =  builder.Configure(aUri);
16 
17  /*  Configure a SqlMapper with an XmlDocument  */
18  XmlDocument anXmlDoc  =  someSupportClass.GetDynamicXmlDocument();
19  ISqlMapper mapper  =  builder.Configure(anXmlDoc);
20 
21  /*  Configure a SqlMapper from a stream.  */
22  Stream aStream  =  someSupportClass.GetDynamicStream();
23  ISqlMapper anotherMapper  =  builder.Configure(aStream);