Java MyBatis oracle插入新行始终返回错误的主id值
在向oracle DB插入新行后,尝试获取主idJava MyBatis oracle插入新行始终返回错误的主id值,java,sql,spring,oracle,mybatis,Java,Sql,Spring,Oracle,Mybatis,在向oracle DB插入新行后,尝试获取主id <insert id="createActivityLog" parameterType="ActivityLog" > <selectKey keyProperty="id" resultType="java.lang.Integer" order="BEFORE"> select ACTIVITY_LOG
<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}
)
新的数据/行可以插入到DB中,而不会出现主键/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>
org.mybatis
mybatis
3.4.6
org.mybatis
mybatis泉
1.3.2
插入成功时返回1,失败时返回0。如果要使用主键,请使用用于插入的对象的getId()
*(示例)
由于
需要额外的查询,因此通常首选useGeneratedKey
。我将向您展示如何使用
useGeneratedKeys
进行以下用途
nextval
nextval
作为列的默认值identity
列create sequence test_seq递增1,从1开始;
创建表user1(
id int,
名称varchar(10)
);
创建表user2(
id int默认测试\u seq.nextval,
名称varchar(10)
);
创建表user3(
id int始终作为标识生成,
名称varchar(10)
);
用法1的Insert语句如下所示
@Insert({
“插入用户1(id,名称)”,
“值(test_seq.nextval,#{name})”})
@选项(useGeneratedKeys=true,
keyProperty=“id”,keyColumn=“id”)
void insert1(用户);
为了完整起见,这里提供了一个XML版本
插入用户1(id、名称)
值(test_seq.nextval,#{name})
用法2和用法3的Insert语句基本相同。请注意,
id
从列列表中省略
@Insert({“Insert-into-user2(name)值(#{name})”)
@选项(useGeneratedKeys=true,
keyProperty=“id”,keyColumn=“id”)
void insert2(用户);
下面是一个演示项目:您的意思是沿着.getId(),主键将映射到参数对象?映射到DAO中使用的参数的id的对象
<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>
activityLogDao.createActivityLog(alog);
Integer myId = alog.getId();