自由、创新、研究、探索……

Linux/Windows Mono/DotNet [ Open Source .NET Development/ 使用开源工具进行DotNet软件开发]
posts - 513, comments - 1977, trackbacks - 141, articles - 55
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理
今天晚上花了两个小时从Castle网站拿到最新的Castle.Facilities.IBatisNetIntegration代码,将IBatisNet版本升级到1.3.0.0,Castle IOC版本升级到1.0.0.2。升级过程中发现几个问题:
1、IBatisNet的配置文件的格式采用了标准的XML的命名空间:
   原来的providers.config 文件
      <?xml version="1.0" encoding="utf-8" ?>
            <providers>
               <clear/>
                 <provider
                     ……
             </providers>
   更改为
   <?xml version="1.0" encoding="utf-8"?>
          <providers xmlns="http://ibatis.apache.org/providers" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <clear/>
             <provider
                     ……
        </providers>
  原来的SqlMap.config文件
 <?xml version="1.0" encoding="utf-8"?>
<sqlMapConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="SqlMapConfig.xsd">
……
</sqlMapConfig>
更改为
<?xml version="1.0" encoding="utf-8"?>
<sqlMapConfig xmlns="http://ibatis.apache.org/dataMapper" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
原来的PO.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<sqlMap namespace="Sequence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="SqlMap.xsd">
……
</sqlMap>
更改为
<?xml version="1.0" encoding="UTF-8" ?>
<sqlMap namespace="Admin" xmlns="http://ibatis.apache.org/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
……
</sqlMap>

2、IbatisNet 增加了一个Log4Net的组件:IBatisNet.Common.Logging.Log4Net.dll,就是使用Log4Net纪录日志的包装。Log4Net组件版本升级1.2.9.0
他的配置文件如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <!-- Register a section handler for the log4net section -->
 <configSections>
  <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  <sectionGroup name="iBATIS">
   <section name="logging" type="IBatisNet.Common.Logging.ConfigurationSectionHandler, IBatisNet.Common" />
  </sectionGroup> 
 </configSections>
 
 <!-- This section contains the log4net configuration settings -->
 <log4net>
  <!-- Define some output appenders -->
  <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
   <param name="File" value="log.txt" />
   <param name="AppendToFile" value="true" />
   <param name="MaxSizeRollBackups" value="2" />
   <param name="MaximumFileSize" value="100KB" />
   <param name="RollingStyle" value="Size" />
   <param name="StaticLogFileName" value="true" />
   <layout type="log4net.Layout.PatternLayout">
    <param name="Header" value="[Header]\r\n" />
    <param name="Footer" value="[Footer]\r\n" />
    <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
   </layout>
  </appender>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
   <layout type="log4net.Layout.PatternLayout">
    <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] &lt;%X{auth}&gt; - %m%n" />
   </layout>
  </appender>
  
  <!-- Set root logger level to ERROR and its appenders -->
  <root>
   <level value="DEBUG" />
   <appender-ref ref="RollingLogFileAppender" />
   <appender-ref ref="ConsoleAppender" />
  </root>
  
  <!-- Print only messages of level DEBUG or above in the packages -->
  <logger name="Castle.Facilities.IBatisNetIntegration.AutomaticSessionInterceptor">
   <level value="DEBUG" />
  </logger>
 </log4net>
 
 <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>
</configuration>
3、providers.config文件支持的数据库多了db2,Informix,PostgreSql0.7,Firebird1.7,SQLite3.看来Ibatisnet越来越强大了,极力推荐大家采用Ibatisnet.
自由、创新、研究、探索……
Url: http://shanyou.cnblogs.com
website: http://www.openbeta.cn

Feedback

#1楼    回复  引用  查看    

2005-10-18 09:31 by NoMagic      
确实,我感觉除非一定需要使用纯的o/r m,其他情况下都应该尽量使用iBatis。

#2楼    回复  引用  查看    

2005-10-22 09:36 by §猪阿不猪§      
Ibatisnet有1.3.0.0版本的吗?没找着!另外想问一下IbatisNet用Log4net组件记录日志是不能用的!配置文件的配置跟上面和DOC给的是一样的,放在web.config或app.config,可就是不能生成log.txt文件。另外指定一个绝对路径也不行!不知道怎么回事

#3楼 [楼主]   回复  引用  查看    

2005-10-22 09:40 by 自由、创新、研究、探索……      
Ibatisnet有1.3.0.0版本还没有发布,还在源代码服务器上CVS,按照Doc的配置,然后你在
protected void Application_Start(Object sender, EventArgs e)
{
//载入log4net配置文件
string log4netConfigFile = AppDomain.CurrentDomain.BaseDirectory.Replace(@"\bin", "").Replace(@"\Debug", "").Replace(@"\Release", "") + @"Log4Net.config";
log4net.Config.DOMConfigurator.ConfigureAndWatch(new FileInfo(log4netConfigFile));

}

#4楼    回复  引用  查看    

2005-10-22 13:44 by §猪阿不猪§      
还是不行啊,哪里有Log4net.config这个文件啊?log4net的配置已经都在web.config里面了?

#5楼 [楼主]   回复  引用  查看    

2005-10-22 14:43 by 自由、创新、研究、探索……      
我是把log4net的配置放在单独的文件Log4net.config中。

#6楼    回复  引用  查看    

2005-11-03 21:19 by §猪阿不猪§      
也下了,1.3.0.0了.确实变了好多,不过你怎么知道上面的配置改了,我找了半天塄没在源资源中找到这些,因为它连tutorial的配置也没变,就原来那些下下来,测试一下都是错误.还好从你这边找到答案了.
不过好像其它地方的配置也有改变,原来的PO.xml文件在原来的版本中可以用,可是在新版本却提示出错.没法子,明天再来研究吧.异常信息如下.你有空帮我看一下,谢谢!
QuickStart.Test.ProductTest.SelectAll : IBatisNet.Common.Exceptions.ConfigurationException :
- The error occurred while loading SqlMap.
- loading insert tag
- The error occurred in <sqlMap resource="${root}Resources/ProductStatement.xml" xmlns="http://ibatis.apache.org/dataMapper" />.
- Check the ProductsSelect.
----> IBatisNet.Common.Exceptions.ConfigurationException : Unknown selectKey type : ''

#7楼 [楼主]   回复  引用  查看    

2005-11-04 19:46 by 自由、创新、研究、探索……      
你的po.xml参照我上面的介绍修改了没有

#8楼    回复  引用  查看    

2005-11-05 08:45 by §猪阿不猪§      
OK,我昨天早上搞定了,好像是在insert配置节里面的seleckKey那上多了个属性
<selectKey property="ProductID" resultClass="int" type="post">

原来是没有type这个属性都可以用的.

#9楼 [楼主]   回复  引用  查看    

2005-11-05 09:40 by 自由、创新、研究、探索……      
无论如何最好加上type这个属性,这是可以提高性能,总直写的信息要越详细越好

#10楼    回复  引用  查看    

2005-11-05 21:56 by §猪阿不猪§      
是的.你对Ibatisnet很熟悉啊,我现在的项目会使用这东西.有问题再请教.

#11楼    回复  引用  查看    

2006-11-05 11:05 by 怀念家驹      
研究楼主这个IBatisNet+Castle 这个开发框架很久,还是不得要领,楼主能否共享一个完整的demo项目,以便加快学习进度?感激不尽。

#12楼    回复  引用  查看    

2006-11-05 12:13 by 怀念家驹      
map1。3出现这样的提示:
This SQL map does not contain a MappedStatement named XXX
sqlMapConfig配置如下:
<?xml version="1.0" encoding="utf-8"?>
<sqlMapConfig xmlns="http://ibatis.apache.org/dataMapper" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">">http://www.w3.org/2001/XMLSchema-instance">
<settings>
<setting useStatementNamespaces="true"/>
<setting cacheModelsEnabled="true"/>
</settings>

<database>
<provider name="sqlServer1.1"/>
<dataSource name="Access" connectionString="server=(local);database=Yanfa2Log;uid=sa;pwd=zhn"/>
</database>

<sqlMaps>
<sqlMap resource="${Maps}/LBaseProject.config"/>
</sqlMaps>
</sqlMapConfig>
映射文件配置如下:
<?xml version="1.0" encoding="UTF-8" ?>
<sqlMap namespace="LBaseProject" xmlns="http://ibatis.apache.org/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">">http://www.w3.org/2001/XMLSchema-instance">
<alias>
<typeAlias alias="LBaseProject" type="Yanfa2Log.Business.Model.Manage.LBaseProject" />
</alias>
<resultMaps>
<resultMap id="LBaseProject_AllColumns" class="LBaseProject">
<result property="Projectid" column="ProjectID" />
<result property="ProjectName" column="ProjectName" />
<result property="Finished" column="Finished" />
<result property="FinishedTime" column="FinishedTime" />
</resultMap>
</resultMaps>

<parameterMaps>
<parameterMap id="LBaseProject_AllParams" class="LBaseProject">
<parameter property="Projectid" column="ProjectID" size="0" dbType="Real" />
<parameter property="ProjectName" column="ProjectName" size="200" dbType="varchar" />
<parameter property="Finished" column="Finished" size="0" dbType="Real" />
<parameter property="FinishedTime" column="FinishedTime" size="0" dbType="DateTime" />
</parameterMap>
</parameterMaps>

<statements>
<select id="LBaseProject_Select" resultMap="LBaseProject_AllColumns" parameterClass="double">
SELECT ProjectID AS Projectid,ProjectName AS ProjectName,CAST (Finished AS REAL) AS Finished,FinishedTime AS FinishedTime
FROM L_Base_Project
<dynamic prepend="WHERE">
<isNotNull prepend="AND" property="ProjectID">ProjectID=$value$</isNotNull>
</dynamic>
</select>
</statements>
</sqlMap>
命名已经配置了却说找不到,楼主帮忙看看,文件路径肯定没问题,我是将原来1。1的map升级到1。3的时候遇到的这些问题,这些配置原来1。1是可以的使用的。

#13楼 [楼主]   回复  引用  查看    

2006-11-05 12:22 by 自由、创新、研究、探索……      
${Maps}这个参数你在哪个文件中定义的

#14楼    回复  引用  查看    

2006-11-05 12:38 by 怀念家驹      
<sqlMap resource="${Maps}/LBaseProject.config"/>
原来是
<sqlMap resource="Maps/LBaseProject.config"/>
${Maps}参数没定义过也能用。两个配置都是报错一样。找不到LBaseProject_Select的MappedStatement named

#15楼    回复  引用  查看    

2006-11-05 12:39 by 怀念家驹      
map文件应该是找到了,因为我把<typeAlias alias="LBaseProject" type="Yanfa2Log.Business.Model.Manage.LBaseProject" />改成其他type的时候报错就是找不到type了。

#16楼    回复  引用  查看    

2006-11-05 17:46 by 怀念家驹      
日志文件打开,每次都报这个错误:
[Header]\r\n2006-11-05 17:39:21,000 [2748] DEBUG IBatisNet.DataMapper.Configuration.Statements.PreparedStatementFactory [(null)] - Statement Id: [LBaseProject.LBaseProject_Insert] Prepared SQL: [INSERT INTO L_Base_Project ( ProjectID, ProjectName, Finished, FinishedTime ) VALUES ( @param0 , @param1 , @param2 , @param3 )]
2006-11-05 17:39:24,015 [2748] DEBUG Castle.Facilities.IBatisNetIntegration.AutomaticSessionInterceptor [(null)] - Automatic Open connection on method :Select
2006-11-05 17:39:24,390 [2748] DEBUG IBatisNet.DataMapper.SqlMapSession [(null)] - Open Connection "24140576" to "Microsoft SQL Server 7.0/2000, provider V1.0.5000.0 in framework .NET V1.1".
2006-11-05 17:39:42,890 [2748] DEBUG Castle.Facilities.IBatisNetIntegration.AutomaticSessionInterceptor [(null)] - Close connection on method :Select
2006-11-05 17:39:42,906 [2748] DEBUG IBatisNet.DataMapper.SqlMapSession [(null)] - Close Connection "24140576" to "Microsoft SQL Server 7.0/2000, provider V1.0.5000.0 in framework .NET V1.1".

#17楼    回复  引用  查看    

2006-11-05 18:04 by 怀念家驹      
${maps}改成了:
<sqlMaps>
<sqlMap resource="${root}Maps/LBaseProject.config"/>
</sqlMaps>
还是老样子。

#18楼    回复  引用  查看    

2006-11-05 18:09 by 怀念家驹      
搞定了,我把vs2005的asp。net development server重启就好了,可能是debug的缓存作怪吧,特此提醒大家一下。谢谢善友兄支持~~~