项目中遇到一个问题,需要在插入一条记录后,得到该记录的主键值。
该主键值是通过序列自动生成~
在阅读了一些文章后,总结出了如下方法:
在ibatis配置中,在insert语句之前,加入selectKey配置
<insert id="insertProduct-ORACLE" parameterClass="com.domain.Product">
<selectKey resultClass="int" keyProperty="id" >
SELECT STOCKIDSEQUENCE.NEXTVAL AS ID FROM DUAL
</selectKey>
insert into PRODUCT (PRD_ID,PRD_DESCRIPTION)
values (#id#,#description#)
</insert>
其中<selectKey>中的keyProperty="id" 为相应表的主键名。保证该属性的类型和javabean中
相应属性类型一致。
若id为int类型,那么<selectKey>中
的resultClass="int" ,将sqlMap.insert返回的object转换为int类型。
若该属性id为String,则<selectKey>中的resultClass="String",将sqlMap.insert返回的object转换为String类型。
注意:
插入的值中,value中对应的id即为selectKey中查询到的id值,此时若继续使用序列,则会造成连续使用,使序列跳数