天道酬勤

博观而约取,厚积而薄发!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

ibatis 学习记录(转)

Posted on 2010-04-29 21:33  Happy Coding  阅读(220)  评论(0编辑  收藏  举报

今年,做xx项目,分到一小块c/s功能的编写。为 综合告警——维护建议。功能很简单,既做一个控件(由于本项目,出发点是以插件的形式来为不同的地区提供不同的),显示各类维护建议等等。系统中用到了ibatis,所以,在此记录下学习和使用的过程总结。

基本知识就不说了,只记录下一些错误。

1:如我们配置一个resultMap时,有这样的话。

 <result property="VendorID" column="vendor_id"/>

请确保property后面的引号里面没有空格。

2:在系统中,要用到这样的sql

 <select id="GetAlarmAdviceIdById"  resultClass="int" parameterClass="string">
      SELECT count(*) as rowCount FROM TAP_ALARM_PROPOSE WHERE ID=#ID#
    </select>

  int t = (int)mSqlMap.QueryForObject(GET_ALRAMaDVICE_ID_BY_Id, alarmAdvice.ID);

呵呵,查了n久的网,没看到有这样的sql的使用,记录下:

parameterClass :为传入的参数。

resultClass :为返回的结果。

3.如下异常的处理:

 The error occurred while loading SqlMap .
- initialize type alias
- The error occurred in .
...

以下是引用别人的文章: (地址:http://matrix.foresee.cn/blogs/simon/archives/cat_technic.html)

在用 iBatisNet 做 Sql 映射的时候, 发现一个疑似 Bug 的特性:

我用一个 Library Assembly 来放置所有的 Domain 文件, 用另一个 Assembly 来放置执行文件 (Exe) 和 Maps Xml 文件。发现: iBatisNet 不能自动载入 Domain 所在的 Assembly, 如果我在初始化 SqlMap 之前没有引用过 Domain 所在的 Assembly, 则会抛出如下异常:
- The error occurred while loading SqlMap .
- initialize type alias
- The error occurred in .
...

如果我在初始化 SqlMap 之前引用了 Domain 里的任一个类, 比如 new 一个 Domain 实例, 则不会抛出该异常.

经跟踪 iBatisNet 源代码, 找到了这个问题的原因, 问题出在 IBatisNet.Common 的 Utilities\TypeResolver.cs 的 public virtual Type Resolve (string typeName) 方法, 它在解析 Map 文件定义的 Map 类型的时候, 要根据逗号分隔符来找到 Assembly Name 载入, 如果定义的 Type 没有逗号和逗号后的 Assembly Name 就会在 AppDomain 的 Assembly 里找, 因为此前没有载入过 Domain Assembly 所有就会报错。解决办法很简单, 在定义 Map 文件的时候把类型写全就是了, 例如:


< typeAlias alias="ClassA" assembly="DomainAssembly.dll" type="DomainAssembly.ClassA" / >

改成
< typeAlias alias="ClassA" assembly="DomainAssembly.dll" type="DomainAssembly.ClassA, DomainAssembly" / >

这样就不会再要求初始化 SqlMap 前 AppDomain 一定要载入 Domain Assembly 了。这不是 Bug, 是 IBatisNet 给的例子没有这么做而误导了群众。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yangang0201/archive/2007/08/06/1728288.aspx