ibatis 小问题集合
Error setting a property: IllegalArgumentException
的一种可能的原因
ibatis 无法将 null
值赋给 Java 的 int
类型变量而产生的。将 resultMap
映射的 bean 中的 int
类型属性改为 Integer
类型就可以了。
同理,对 long
和 Long
类型也是一样。
也可以考虑对字段设置默认值
<sqlMap>
若是加 namespace 的话,单凭 sql sentence 的 id 是不可能定位到 sql sentence 的
若是多个 sqlmap 中都有一句 <sql id="table">xxx</sql>
,那么 id="table"
会被报错 “duplicated id”。加 namespace 可以解决但是又会陷入上述的问题
select count(1)
的 sqlmap 一定要记得指定 resultClass
为 java.lang.Integer
不然得到的结果会是 null
could not instantiate result class
的一种可能的原因
java.lang.RuntimeException: JavaBeansDataExchange could not instantiate result class.
Cause: java.lang.InstantiationException: com.bar.foo.po.GlobalData
一个可能的原因是因为 PO 写了带参构造器,然后 ibatis 找不到 无参构造器,无法初始化 PO
update 操作是不会触发 on update
如果字段是 ctime timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
,然后你去 update ctime
,那 ctime
是你 update 的值呢?还是被 on update CURRENT_TIMESTAMP
了呢?
答案是前者,update 成功~
如果没有找到记录,queryForList
也不会返回 null
,而是返回一个空的 list
如何查看 ibatis 执行的 sql?
允许 ConsoleAppender
输出 debug
,然后加上下面两行
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
XML 写法为:
<!-- for ibatis debug -->
<appender name="LOG.DEBUG" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="/home/logs/foo/log4d.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss} <mailclub> %-5p %C - %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="DEBUG" />
<param name=LevelMax" value="FATAL" />
</filter>
</appender>
<logger name="java.sql.Connection" additivity="false">
<level value="DEBUG" />
<appender-ref ref="LOG.DEBUG" />
</logger>
<logger name="java.sql.PreparedStatement" additivity="false">
<level value="DEBUG" />
<appender-ref ref="LOG.DEBUG" />
</logger>
<!-- for ibatis debug -->
#param#
与 $param$
的区别
#
与 &
其实与 <c:out>
一样都是输出策略。
简单说就是 #param#
会做类型转换,如果是 int
就直接输入;如果是 String
就输出 ‘xxx’,自动给你加上引号
而 $param$
是不会输出引号的,你传的是啥,它按原样输出。所以 $
方式一般用于传入数据库对象,比如 from $tableName$ where ($condition$)
Comments