たなちの開発日誌

自分の知識をストックしていくためのブログ

MyBatisで自動採番されたIDを取得する方法

テーブルのidにAUTO_INCREMENT 属性が設定されているとき、insert処理を実行した後に自動生成されたIDを取得したいケースがあった。下記のようなselectKeyステートメントを利用することで実現できる。orderには"BEFORE"または"AFTER"を設定することができ、insert実行の前後どちらのタイミングでキーを取得するか選択できる。

Mapper XML ファイル

<!-- 登録処理 -->
<insert id="insertItem">
    INSERT INTO USER (
        NAME
        ,AGE
    ) VALUES (
        #{name}
        ,#{age}
    )
    <!-- 自動採番されたIDを取得 -->
    <selectKey resultType="int" keyProperty="id" order="AFTER">
        select @@IDENTITY
    </selectKey>
</insert>

Java (Spring framework)

Spring framework で使用したときはこんな書き方をした。かなり簡略化してるけど。

userService.java

User user = new User();
user.setName("chitana");
user.setAge(20);

// 新規登録
userMapper.insertItem(user);
// idを取得できている
int id = user.getId();

userMapper.java

/**
 * Userテーブルへ新規登録
 * @param user
 */
void insertItem(User user);

参考文献

MyBatis – MyBatis 3 | Mapper XML ファイル