项目中遇到一个问题,需要在插入一条记录后,得到该记录的主键值。
该主键值是通过序列自动生成~
在阅读了一些文章后,总结出了如下方法:
在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值,此时若继续使用序列,则会造成连续使用,使序列跳数
本文介绍了一种在IBatis配置中通过<insert>语句结合<selectKey>配置来获取数据库自增主键的方法,确保主键唯一且自增特性得以保留。
309

被折叠的 条评论
为什么被折叠?



