阿不

不抛弃,不放弃

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  158 随笔 :: 0 文章 :: 2109 评论 :: 67 引用

刚爬完鼓山回来,想到这篇刚刚开始,不敢怠慢,洗完澡休息一下就到电脑旁边来了。现在我开始介绍一下iBatis的配置和日志处理吧。

iBatis基本的运行环境配置主要由两个文件组成,分别是SqlMap.configProvider.config。它们是必需的两个配置文件,基中SqlMap.config的功能类似于web.config或者app.config,是iBatis核心的配置文件,它的存放路径也跟应用程序配置文件一样,必须放在应用程序的运行目录下并且它的文件名是保留的,不可改变的。而Provider.config是一个数据驱动提供类的配置,它的文件名是可以随意改变的,因为通过SqlMap.config的一个配置节可以配置它的引用。

SqlMap.config包括以下一些主要的配置节,根据需要,有的配置节并不是必须的:

1. properties :可以根据需要配置一些常量属性。如果这些属性有很多的话可以单独写一个文件里面,再通过resource(或url, embedded分别是引用url和编译在程序中的资源文件)属性引用进来。如:

<properties resource="../../database.config">

        <property key="useStatementNamespaces" value="false"/>

   </properties>

这个配置节是可选的。

2. settings:包括有三个配置段:

<setting useStatementNamespaces="${useStatementNamespaces}"/>

        <setting cacheModelsEnabled="true"/>

        <setting validateSqlMap="false"/>

useStatementNamespaces:在文档中说明它的作用是配置在使用语句ID的时候要不要加命名空间,例中${useStatementNamespaces}就是使用properties中的一个属性,默认是false

cacheModelsEnabled 是配置要不要启用iBatis的缓存模型,默认是true

validateSqlMap 是配置要不要启示验证映射文件,默认是false

    3. providers :配置数据驱动提供类配置文件的路径和文件名。

              <providers resource="providers.config"/>

    4. database : 数据库的信息,包括使用哪些数据库驱动和数据连接字符串的配置。

<database>

        <!-- Optional ( default ) -->

        <provider name="sqlServer1.1"/>

        <dataSource name="iBatisNet"

connectionString=""/>

        </database>

    5. alias : 类型别名的配置,为了使用更方便的使用类(类名更短),就需在这里进行别名的配置。

        <alias>

            <typeAlias alias="ArrayList" type="System.Collections.ArrayList,mscorlib"/>

        </alias>

    6. typeHandlers :这个就相对比较复杂些了,到目前我也没有使用到。从字面上理解,它是一个类型的处理器,它的作用是当你使用的数据库当中有iBatis不支持或不认识的字段(或者不希望默认的处理方式),那就可以为它取一个名字,并且指定对应的.NET类型来处理它。

    <typeHandlers>

        <typeHandler type="bool" dbType="Varchar" callback="OuiNonBool"/>

    </typeHandlers>

    7. sqlMaps :用来包含当前已经写好的,并且需要用到的数据类映射文件。

<sqlMaps>

        <!-- <sqlMap url="E:/Projet/iBatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/${directory}/MSSQL/SqlClient/Account.xml"/>   -->

        <sqlMap resource="Mappers/ContentMapper.xml"/>

        <!-- Rem : If used as embbeded Resources, use

        <sqlMap embedded="Maps.MSSQL.SqlClient.Account.xml, IBatisNet.DataMapper.Test"/>-->

</sqlMaps>

以上就是Sqlmap.config的基本内容了。注意,以上凡是涉及到引用外部文件的都支持resouceurlembedded 三种方式。

Provider.config的配置类很简单,在默认的Provider.config中已经有很多不同数据库的数据驱动,而在SqlMapp.configdatabase配置的provider属性就是使用Provider.config中已有的不同驱动中的一个。以下是添加一个Ado.net 2.0 数据访问驱动:

<provider

    name="sqlServer2.0"

    description="Microsoft SQL Server 7.0/2000/2005, provider V2.0.0.0 in framework .NET V2.0"

    enabled="true"

    default="true"

    assemblyName="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" connectionClass="System.Data.SqlClient.SqlConnection"

    commandClass="System.Data.SqlClient.SqlCommand"

    parameterClass="System.Data.SqlClient.SqlParameter"

    parameterDbTypeClass="System.Data.SqlDbType"

    parameterDbTypeProperty="SqlDbType"

    dataAdapterClass="System.Data.SqlClient.SqlDataAdapter"

    commandBuilderClass="System.Data.SqlClient.SqlCommandBuilder"

    usePositionalParameters="false"

    useParameterPrefixInSql="true"

    useParameterPrefixInParameter="true"

    parameterPrefix="@"/>

OK,以上就是SqlMap.configProvider.config的基本内容。下面我来介绍一下如果利用log4net来记录iBatisnet的一些运行日志记录。这也是我当初花了很多的时间才解决的一个问题,因为记录这些日志太重要了,它可以记录下每次生成并执行的SQL语句,对我们排除配置错误有非常重大的意义。而如果你是使用最新版的(当前是1.3.0),但是文档使用的是1.2.1的话,那可能你怎么折腾都无法搞出结果来。

按照1.2.1的文档介绍那样在web.config(app.config) 加上合适的配置节后,然后把log4net.dllIBatisNet.Common.Logging.Log4Net.dll拷到bin目录下后,你可能会认为跟文档介绍的一样,生成一个log.txt,并记录下日志。但事实不是这样的,在1.3.0的版本中还需要再加上一个配置节组:

<sectionGroup name="iBATIS">

            <section name="logging" type="IBatisNet.Common.Logging.ConfigurationSectionHandler, IBatisNet.Common" />

        </sectionGroup>

配置组的配置值如下:

<iBATIS>

        <logging>

            <!--<logFactoryAdapter type="IBatisNet.Common.Logging.Impl.ConsoleOutLoggerFA, IBatisNet.Common">

                <arg key="showLogName" value="true" />

                <arg key="showDataTime" value="true" />

                <arg key="level" value="ALL" />

                <arg key="dateTimeFormat" value="yyyy/MM/dd HH:mm:ss:SSS" />

            </logFactoryAdapter>    -->

            <logFactoryAdapter type="IBatisNet.Common.Logging.Impl.Log4NetLoggerFA, IBatisNet.Common.Logging.Log4Net">

                <arg key="configType" value="inline" />

            </logFactoryAdapter>

        </logging>

    </iBATIS>

经过以上的配置后,再运行程序,就会创建log.txt并且记录日志了。注意:即使是按以上的配置后,有可能还是无法记录日志,那就可能是log4net.dllIBatisNet.Common.Logging.Log4Net.dll的中的一个或两个没有拷到bin目录,正常情况下,我们不需引用这两个程序集,只需把它们拷到运行目录下,即使你需要记录日志,但找不到他们,程序仍然能正常执行而不会抛出异常,如果你没有经验的话,解决这个问题可能需要你很多的时间。

以上就是今天要介绍的内容了,Hope this helps

 

附注:

1. 参考资料:Data Mapper Guide-1.2.1.chm DataMapper-1.2.1.chm

2. 配置文件智能提示:把provider.xsd SqlMap.xsd SqlMapConfig.xsd 三个文件拷贝到

VS 2005 C:\Program Files\Microsoft Visual Studio 8\Xml\Schemas (安装目录)

VS 2003 C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Packages\schemas\xml   (安装目录)下,就可以在VS IDE下编写配置文件时得到Intellisense的帮助,前提是配置的文件的第一个节点写正确的命名空间和XSD文件。

3DEMO下载。使用VS 2005 ,你可能需要安装有免费版本的SQL 2005

阿不 http://hjf1223.cnblogs.com
posted on 2006-04-24 08:26 阿不 阅读(4784) 评论(16)  编辑 收藏 所属分类: Ibatisnet

评论

#1楼  2006-04-24 09:59 INRIE      
最近也在关注IBatisNet和Castle,期待你更多更好的文章~~
  回复  引用  查看    

#2楼 [楼主] 2006-04-24 10:11 阿不      
@INRIE
谢谢你的支持。大家可以提提意见,比较哪些可以详细介绍,哪些可以粗略概括,或者你认为应该介绍哪些内容,我尽量做得更好,谢谢。
  回复  引用  查看    

#3楼  2006-04-24 10:24 INRIE      
我觉得目前IBatisNet+Castle是个不错的选择,可以根据NPetshop2这样的实例展开来介绍,这样也更有针对性而且可以让更多人更好的理解IBatisNet和Castle.
  回复  引用  查看    

#4楼  2006-04-24 10:26 Terrylee      
Good!

IBatisNet也是我比较喜欢的开源项目之一,可惜一直没有研究过,期待阿不兄的这个系列!
  回复  引用  查看    

#5楼 [楼主] 2006-04-24 10:49 阿不      
可惜一直没有时间去深入研究NPetshop2,目前时间比较紧迫,主要注重应用方面.
  回复  引用  查看    

#6楼  2006-04-24 12:54 铱星      
不错,期待下文
  回复  引用  查看    

#7楼 [楼主] 2006-04-24 13:21 阿不      
关于日志处理的配置问题在《Data Mapper Guide-1.3.0.chm》文档中已经更新了,由于在写这篇Blog的时候手头上只有1.2.1版本的,所以才会特别注意到这个问题。
  回复  引用  查看    

#8楼  2006-04-24 14:35 ArFly [未注册用户]
兄弟,今天才上来看你的BLOG,,觉得不错,,希望你加油,也希望以后在网上看到你的更多更好的文章。。。。。支持。。。。。。。。。。。。。。。。。
  回复  引用    

#9楼  2006-06-08 13:17 ddd [未注册用户]
vs2005+IBatisNet+log4net如何配置?为何不能自动记录调试内容?(除非手动写log.info(...))等
  回复  引用    

#10楼 [楼主] 2006-06-08 14:42 阿不      
可以的,你可以参考一下iBatisnet的帮助文档,按照上面的方法就可以了,不过你要确保log4net在运行目录才行的。
  回复  引用  查看    

#11楼  2006-06-12 11:28 jiamu [未注册用户]
demo缺少文件:
\Web\Mappers\Employees.xml
  回复  引用    

#12楼 [楼主] 2006-06-12 12:04 阿不      
@jiamu

Sorry,我现在也找不到这个文件了,你可以在SqlMap.config把这句话注释了。<sqlMap resource="Mappers/Employees.xml"/>改成:
<!--<sqlMap resource="Mappers/Employees.xml"/>-->

  回复  引用  查看    

#13楼  2007-06-06 10:52 steven love sunny      

在用IBatis的过程中我有个问题请教,通常我们将配置文件信息(如:providers.config和SqlMap.config)放在默认的地方,WinForm放在应用系统根目录下,现在我将它放在应用系统根目录的Config文件夹下,可是在创建ISqlMapper实例的时候会出错。我的providers.config和SqlMap.config放在同一目录, SqlMap.config中大致这样配置:
<properties embedded="Config.providers.config,IBatisWinFormDemo"/>"
.....
<sqlMaps>
<sqlMap embedded="Maps.Employees.xml,IBatisWinFormDemo"/>
</sqlMaps>
......
而在实例化的时候
private static void InitMapper()
{
ConfigureHandler handler = new ConfigureHandler(Configure);
DomSqlMapBuilder builder = new DomSqlMapBuilder();
FileInfo file = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + @"Config\SqlMap.config");
_mapper = builder.ConfigureAndWatch(file, handler);
}
在执行到最后_mapper = builder.ConfigureAndWatch(file, handler)的时候会出错,请指教,谢谢!
  回复  引用  查看    

#14楼 [楼主] 2007-06-07 20:15 阿不      
@steven love sunny
你可以尝试不要使用embedded的方式,这种方式是将配置文件直接嵌入程序集。这样配置:
<properties resource="Resources\properties.config"/>
<providers resource="Resources\providers.config"/>
其中Resources是一个子目录。
  回复  引用  查看    

看不懂啊,大哥
  回复  引用    

#16楼  2008-07-03 08:57 酒醉的馒头      
咨询一个问题。我准备启动个新项目。。采用ibatisnet遇到一个配置上得问题。。。比如我一套系统里。有多个数据库分开。分读数据库和写数据库。我怎么配置他的写的sql语句用写的那个数据库串 那些select的方法用写的那个数据库字符串呢。
  回复  引用  查看    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-04-24 08:58 编辑过


相关链接: