6

Oracleテーブルにデータを挿入しているのでid、挿入された行のを取得する必要があります。これidはシーケンスによって生成され、トリガーによってテーブルに挿入されます。

を使用して挿入された行のIDを取得する方法はいくつかありますがJDBC、コマンドMyBatisを実行してINSERTいるため、データを挿入した後にIDを取得する方法がわからないようです。アドバイスをいただければ幸いです。

4

4 に答える 4

6

このようなものが機能するはずです

class User {
  int userId
  ...
}

<insert id="addUser" useGeneratedKeys="true" keyColumn="user_id" keyProperty="userId">
  INSERT INTO user(login, name,...) VALUES(#{login}, #{name},...
</insert>
于 2013-03-06T16:20:24.353 に答える
3

私にとってはこのように機能します(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>
于 2014-01-06T15:29:11.767 に答える
0

トリガーがid_seqOracleシーケンスを使用してIDを取得するとします。同じデータベースセッションを使用してMyBatisから実行する場合、SQL

select id_seq.currval from dual;

使用したIDを取得します。

于 2013-03-05T21:58:49.423 に答える
0

オラクルでは、2つのフェーズでそれを行う方が良いでしょう。うまく機能し、価格はもう1つのマッパーだけです:

第1段階:

<?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を取得し、オブジェクトプレースホルダーに入れて

第2フェーズ:

オブジェクトを挿入します

于 2015-04-09T07:54:17.047 に答える