刚爬完鼓山回来,想到这篇刚刚开始,不敢怠慢,洗完澡休息一下就到电脑旁边来了。现在我开始介绍一下 iBatis 的配置和日志处理吧。
iBatis 基本的运行环境配置主要由两个文件组成,分别是 SqlMap.config 和 Provider.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 的基本内容了。注意,以上凡是涉及到引用外部文件的都支持resouce ,url ,embedded 三种方式。
Provider.config 的配置类很简单,在默认的 Provider.config 中已经有很多不同数据库的数据驱动,而在 SqlMapp.config 的 database 配置的 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.config 和Provider.config 的基本内容。下面我来介绍一下如果利用log4net 来记录iBatisnet 的一些运行日志记录。这也是我当初花了很多的时间才解决的一个问题,因为记录这些日志太重要了,它可以记录下每次生成并执行的SQL 语句,对我们排除配置错误有非常重大的意义。而如果你是使用最新版的(当前是1.3.0 ),但是文档使用的是1.2.1 的话,那可能你怎么折腾都无法搞出结果来。
按照1.2.1 的文档介绍那样在web.config(app.config) 加上合适的配置节后,然后把log4net.dll 和IBatisNet.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.dll 和IBatisNet.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 文件。
3 . DEMO 下载 。使用 VS 2005 ,你可能需要安装有免费版本的 SQL 2005 。