如何使用MyBatis获取Oracle中的最后一个插入ID?

我正在将一些数据插入到Oracle表中,并且需要检索插入行的id 。 所述id由序列生成,然后通过触发器插入到表中。

现在,我知道在使用JDBC时有几种方法可以获取插入行的id,但由于我使用MyBatis来执行INSERT命令,我似乎无法弄清楚如何在插入数据后获取id 。 任何建议将不胜感激。

这样的事情应该有效

 class User { int userId ... }  INSERT INTO user(login, name,...) VALUES(#{login}, #{name},...  

对我来说它的工作原理如下(mybatis 3)

  INSERT INTO PROJECT (TITLE,DESCRIPTION) VALUES (#{title},#{description})  

不需要selectKey。 只需确保在keyProperty中输入正确的值。我在插入oracle之前有一个触发器,以便从序列中获取下一个id。

或者,这也有效:

  BEGIN INSERT INTO PANELIST(PANEL_ID) VALUES (#{panelId}) RETURNING PANELIST_ID INTO #{panelist.panelistId,mode=OUT,jdbcType=INTEGER}; END;  

假设触发器使用id_seq Oracle序列来获取id。 如果使用相同的数据库会话从MyBatis执行SQL

 select id_seq.currval from dual; 

您将获得使用的ID。

有了oracle,更好的是分两个阶段完成。 效果很好,价格只有一个映射器:

第一阶段:

      

你获得seq,放入你的对象占位符和

第二阶段:

插入你的对象