今年,做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