テーブルの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);