头一次在项目中用iBatis,以前用过Hibernate所以接受起来比较快,但是iBatis和Hibernate在细节上还是有很多不同之处的。
在这篇文章里,我主要总结iBatis中一些容易产生莫名其妙的错误的地方。
一、
iBatis会对你写在xml中的sql语句进行优化。它不是傻傻的按照你写的东西原封不动的执行。在这里我目前只发现了一点对于你的resultClass中没有的属性,即便是你写在select语句中有这个属性,它在执行的实现也会去掉。返回的ResultSet中是没有的。
二、
写在sql-map-config.xml里面的那些sqlMap的顺序不是随便怎么样都可以的。对于的A-sqlMap要用到B-sqlMap中定义的东西的时候,A一定要写在B前面。不然会报错,说你B中有些什么东西找不到定义。
三、
<insert id="..." parameterClass="...">
<selectKey resultClass="..." keyProperty="..." >
select ....
</selectKey>
.....
.....
</insert>
这是主动生成主键编号并执行插入的方法。在使用这个方法的时候,你的parameterClass中一定要有与keyProperty对应的属性,这样ibatis会把select出来的编号放回parameterClass中,然后再执行insert操作。
四、
sqlMap中的定义是全局的,尽量不要出现重复的定义,如typeAlias,sql-id等等。