頭一次在項目中用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等等。