概要
MyBatisでDBへ情報の挿入を行う際に、自動採番される値を取得してオブジェクトに格納を行いたい。
環境
名前 | バージョン |
---|---|
Java | SE17 |
SpringBoot | 4.17.1 |
MyBatis | 3.5.11(spring用のフレームワークを使用) |
postgreSQL | 14.6 |
実装
<insert id="insert" useGeneratedKeys="true" keyProperty="id">
INSERT INTO items
(name,description)
VALUES
(#{item.name},#{item.description})
</insert>
<insert>
属性名 | 値 | 説明 |
---|---|---|
id | 対応するメソッド名 | |
useGeneratedKeys | true | tureにすることで自動採番される値を自動で取得。オブジェクトへ反映してくれる |
keyProperty | オブジェクトの変数名 | 自動採番された値を挿入するオブジェクト内の変数名 |
insertタグのuseGeneratedKeys属性を有効にし、keyProperty属性で取得した(自動採番された)値を格納するオブジェクトの変数名を指定することで,挿入と同時に自動的にオブジェクトに値を格納してくれる。以下のように確認可能。
System.out.println(item.getId); // 自動された値(id)を表示
後述
その他の記事などで、今回の実装に加え<selectKey>タグを実装させる以下のような方法も見られるが、今回の環境では不要だった。(むしろ実装することで異常が出た)。
<insert id="insert" useGeneratedKeys="true" keyProperty="id">
SQL本文
<!-- 自動採番されたIDを取得 -->
<selectKey resultType="int" keyProperty="id" order="AFTER">
SELECT last_value FROM items_id_seq
</selectKey>
</insert>