簡體   English   中英

如何使用MyBatis在Oracle中獲取最后一個插入ID?

[英]How to obtain last insert id in Oracle using MyBatis?

我將一些數據插入到Oracle表中,需要檢索插入行的id 所述id由序列生成,然后通過觸發器插入到表中。

現在,我知道有幾種方法可以在使用JDBC時獲取插入行的id,但由於我使用MyBatis來執行INSERT命令,我似乎無法弄清楚如何在插入數據后獲取id 。 任何建議將不勝感激。

這樣的事情應該有效

class User {
  int userId
  ...
}

<insert id="addUser" useGeneratedKeys="true" keyColumn="user_id" keyProperty="userId">
  INSERT INTO user(login, name,...) VALUES(#{login}, #{name},...
</insert>

對我來說它的工作原理如下(mybatis 3)

<insert id="create" parameterType="Project" useGeneratedKeys="true" keyProperty="project.projectId" keyColumn="PROJECT_ID">
    INSERT INTO PROJECT (TITLE,DESCRIPTION)
    VALUES
    (#{title},#{description})
</insert>

不需要selectKey。 只需確保在keyProperty中輸入正確的值。我在插入oracle之前有一個觸發器,以便從序列中獲取下一個id。

或者,這也有效:

<insert id="createEmpty" statementType="CALLABLE" parameterType="Panelist">
    BEGIN INSERT INTO PANELIST(PANEL_ID) VALUES (#{panelId})
    RETURNING PANELIST_ID INTO
    #{panelist.panelistId,mode=OUT,jdbcType=INTEGER}; END;
</insert>

假設觸發器使用id_seq Oracle序列來獲取id。 如果使用相同的數據庫會話從MyBatis執行SQL

select id_seq.currval from dual;

您將獲得使用的ID。

有了oracle,更好的是分兩個階段完成。 效果很好,價格只有一個映射器:

第一階段:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"     
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.sample.work.dao.SequencerMapper" >
<select id="selectNextId" resultType="long" >
 select seq_sample.nextval from dual
</select>
</mapper>

你獲得seq,放入你的對象占位符和

第二階段:

插入你的對象

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM