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 完成插入数据库,并将主键返回的注意事项