iBATIS3 から、<insert>の中に書く selectKey で、新規IDを受ける記述は、
<selectKey keyProperty="id" type="post" resultClass="java.lang.Long">
SELECT LAST_INSERT_ID() AS value
</selectKey>
ではなく!
resultClass → resultType
type="post" → order="AFTER"
に変更になり、以下のように、書く
<insert id="insertItem" parameterType="jp.aaa.entity.Item">
INSERT INTO tblitem (name,price,buydate,refid)
VALUES (#{name},#{price},#{buydate},#{refid})
<selectKey keyProperty=”id” resultType="int" order="AFTER" >
SELECT LAST_INSERT_ID() AS value
</selectKey>
</insert>
iBATIS2 の時のように、SqlMapClient#insert メソッドの戻り値で新規ID が返ってくるのではなく、
iBATIS3 では、SqlSession#insert(sqlmapperId,obj); の戻り値は挿入結果行数であって、
insertのパラメータ=オブジェクトで、keyProperty 名で宣言したフィールドに入ってくる。
上の例なら、jp.aaa.entity.Item クラスの挿入Object インスタンスの long id; フィールド
に入ってくる。
ただし、注意すべきことがある。SqlSession を生成する時に、
SqlSessionFactory#openSession(ExecutorType.BATCH,false)
で、生成していると、SQLバッチ実行ということで、このidは、返ってこない。
メソッドの引数として渡した物に、勝手に入ってくるのでちょっと違和感を持ったが
コーディングのステップが減らすことができる。