通常我们执行一个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值作为参数传递进去。