頭一次在項(xiàng)目中用iBatis,以前用過Hibernate所以接受起來比較快,但是iBatis和Hibernate在細(xì)節(jié)上還是有很多不同之處的。
在這篇文章里,我主要總結(jié)iBatis中一些容易產(chǎn)生莫名其妙的錯誤的地方。
一、
iBatis會對你寫在xml中的sql語句進(jìn)行優(yōu)化。它不是傻傻的按照你寫的東西原封不動的執(zhí)行。在這里我目前只發(fā)現(xiàn)了一點(diǎn)對于你的resultClass中沒有的屬性,即便是你寫在select語句中有這個(gè)屬性,它在執(zhí)行的實(shí)現(xiàn)也會去掉。返回的ResultSet中是沒有的。
二、
寫在sql-map-config.xml里面的那些sqlMap的順序不是隨便怎么樣都可以的。對于的A-sqlMap要用到B-sqlMap中定義的東西的時(shí)候,A一定要寫在B前面。不然會報(bào)錯,說你B中有些什么東西找不到定義。
三、
<insert id="..." parameterClass="...">
<selectKey resultClass="..." keyProperty="..." >
select ....
</selectKey>
.....
.....
</insert>
這是主動生成主鍵編號并執(zhí)行插入的方法。在使用這個(gè)方法的時(shí)候,你的parameterClass中一定要有與keyProperty對應(yīng)的屬性,這樣ibatis會把select出來的編號放回parameterClass中,然后再執(zhí)行insert操作。
四、
sqlMap中的定義是全局的,盡量不要出現(xiàn)重復(fù)的定義,如typeAlias,sql-id等等。