備忘録。
MyBatis で DB に INSERT した際に ID などの特定のカラムの値を取得する方法について。
MyBatis を使う場合、通常では INSERT や UPDATE は影響を与えた件数を返すことになる。しかし INSERT 時に ID を Auto Increment する場合、呼び出し側で生成された ID が欲しくなることがある。この場合、useGeneratedKeys
と keyColumn
というオプションを使う。
以下のテーブルを例に考えてみる
CREATE TABLE person ( id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, name VARCHAR(50) NOT NULL );
このテーブルに name
のみを指定して INSERT する。Mapper に渡すパラメータクラスは以下の通り
class Person { public int id; public String name; }
MyBatis のアノテーションを使う場合、Mapper は以下のようになる。
interface PersonMapper { @Insert("INSERT INTO person (name) VALUES (#{name})") @Options(useGeneratedKeys=true, keyColumn="id") void insertVillage(Person person); }
@Insert
に加えて @Options
を使って2つのオプションを与えているのがポイント。useGeneratedKeys
が true
の場合、パラメータとして渡されたオブジェクトの keyColumn
に指定したフィールド(この場合は id
)に INSERT したレコードの id が入る。(戻り値ではないことに注意)
参考: