尝试在向oracle db插入新行后获取主id
<insert id="createActivityLog" parameterType="ActivityLog" >
<selectKey keyProperty="id" resultType="java.lang.Integer" order="BEFORE">
select ACTIVITY_LOG_SEQ.nextval as id from dual
</selectKey>
insert into ACTIVITY_LOG (
activity_log_id,
notes,
details )
values (
#{id,jdbcType=NUMERIC},
#{notes,jdbcType=VARCHAR},
#{details,jdbcType=VARCHAR}
)
下面是java调用
Integer myId=(Integer) activityLogDao.createActivityLog(alog);
新的数据/行可以插入到数据库中,而主键/id正确无误。但是myid总是返回为1(应该是8971)。如何获得正确的值。谢谢你的建议。
版本:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
2条答案
按热度按时间tgabmvqs1#
insert成功时返回1,失败时返回0。如果要使用主键,请使用用于插入的对象的getid()。
vhmi4jdf2#
作为
<selectKey />
需要额外的查询,useGeneratedKey
一般优先。我来教你怎么用
useGeneratedKeys
用于以下用途。使用
nextval
在insert语句中使用
nextval
作为列的默认值使用
identity
柱为了便于解释,我将为每个案例使用一个单独的表格。
用法1的insert语句如下所示。
为了完整起见,这里提供了一个xml版本。
用法2和用法3的insert语句基本相同。
请注意
id
从列列表中省略。下面是一个演示项目:
https://github.com/harawata/mybatis-issues/tree/master/so-66252438