mybatis插入数据并返回主键(oracle)

Posted 一响贪欢

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis插入数据并返回主键(oracle)相关的知识,希望对你有一定的参考价值。

 

通常我们执行一个inser语句,即使有返回,也只是会返回影响了多少条数据

@insert("insert into t_user (id,name) values (suser.nextval,#{item.name,jdbcType=VARCHAR})")
void insert(@Param("item") TUser t);

但在有些时候,我们还需要获得插入数据的主键,在oracle数据库中,主键并没有办法自动增长,无法使用insert对应的useGeneratedKeys和keyProperty属性自动返回增加的主键。

这时我们可以使用<selectKey>标签。

@insert("insert into t_user (id,name) values (#{item.id,jdbcType=NUMERIC},#{item.name,jdbcType=VARCHAR})")
@SelectKey(statement="select suser.nextval from dual", keyProperty="item.id", before=true, resultType=Long.class)
void insert(@Param("item") TUser t);

在上面selectKey中

before=true,表示该语句会执行在insert之前。

statement="select suser.nextval from dual",表示我们在这里获取下一个序列值,将该值作为主键。

resultType=Long.class,表示获取的值为long类型。

keyProperty="item.id",表示把生成的序列值放入参数TUser中的id属性中。

此时,在我们的参数@Param("item") TUser t中,他的id值就已经是我们所获取的最新的序列。然后程序会再执行@insert内容,将id值作为参数传递进去。

 

以上是关于mybatis插入数据并返回主键(oracle)的主要内容,如果未能解决你的问题,请参考以下文章

mybatis+oracle 完成插入数据库,并将主键返回的注意事项

Mybatis插入数据时 返回主键

Mybatis插入数据时 返回主键

mybatis如何获取oracle新插入数据记录的主键?

mybatis insert 返回主键 的before 和after的区别

Mybatis 怎么返回insert插入的主键