40

MyBatis で挿入の生成されたキーを取得するにはどうすればよいですか? この質問について多くのページを読みましたが、まだブロックされています。誰か助けてください。これは私のコードです:

テーブル:

ID_ERROR long primary key
DATE timestamp
TYPE varchar
MESSAGE varchar
SOURCE varchar

ダオ:

Long returnedId = 0L;
MyMapper myMapper = this.sqlSession.getMapper(MyMapper.class);
myMapper.insertRecord(returnedId, Utils.now(), t.getClass().getName(), t.getMessage(), c.getName());
return returnedId;

mapper.java:

public void insertRecord(@Param("returnedId") Long returnedId, @Param("timestamp")Timestamp timestamp,@Param("type") String type,@Param("message") String message,@Param("source") String source);

mapper.xml

 <insert id="insertRecord" parameterType="map" useGeneratedKeys="true"  keyProperty="ID_ERROR">
    INSERT INTO errors (
        DATE,
        TYPE,
        MESSAGE,
        SOURCE
    )
    VALUES (
        #{timestamp},
        #{type},
        #{message},
        #{source}
    )
    <selectKey resultType="long" order="AFTER" keyProperty="returnedId">
        SELECT LAST_INSERT_ID() as returnedId
    </selectKey>
</insert>

なにが問題ですか?この挿入の生成されたキーを取得するにはどうすればよいですか? ありがとう!

4

8 に答える 8

0

Mapper Xml の下で、次のクエリを使用します。

    <insert id="saveDemo" parameterType="com.abc.demo"
       useGeneratedKeys="true" keyProperty="demoId" keyColumn="DEMOID">
       INSERT INTO TBL_DEMO (DEMONAME,DEMODESCRIPTION)
       VALUE (#{demoName},#{demoDescription})
       <selectKey keyProperty="demoId" resultType="int" order="AFTER">
        SELECT LAST_INSERT_ID();
       </selectKey>
    </insert>

ジャワ側

@Override
public boolean saveDemo(Demo demo) {
    boolean status = false;
    SqlSession session = this.sqlSessionFactory.openSession();
    try {
        DemoMapper mapper = session.getMapper(DemoMapper.class);
        mapper.saveDemo(demo);
        session.commit();
        status = true;
    } catch(PersistenceException e) {
        System.out.println(e);
    } finally {
        session.close();
    }
    return status;
}
于 2016-05-13T02:43:05.773 に答える
-1

以下の手順に従ってください。

  1. ID を属性としてエラー POJO を作成する

  2. 以下のように returnId を error に置き換えます。

public void insertRecord(@Param("error") エラー error, @Param("timestamp")Timestamp タイムスタンプ,@Param("type") String type,@Param("message") String message,@Param("source" ) 文字列ソース);

  1. keyProperty="ID_ERROR" を keyProperty="error.id" に変更します

  2. 削除する

    <selectKey resultType="long" order="AFTER" keyProperty="returnedId">
        SELECT LAST_INSERT_ID() as returnedId
    </selectKey>
    

挿入さidれますerror.id

于 2013-08-30T06:54:58.193 に答える
-5

生成された主キーを取得する場合は、Mapまたはで引数を渡す必要があります。POJO Object

public void insertRecord(Map<String, Object> map);

マッピング メソッドを呼び出すときは、値をマップに入れます。

Map<String, Object> map = new HashMap<String, Object>();
map.put("returnedId", 0);
map.put("message", message);
// other paramters
mapper.insertRecord(map);
return map.get("returnedId");
于 2013-08-30T01:18:35.677 に答える