【mybatis】Insert時にシーケンスで自動採番されたキーを取得する【SpringBoot】

投稿者: | 2018年10月9日

サーバーサイドはSpringBootを使って絶賛Webサービスを開発しています。カツオです。

SpringBootのDBアクセスはJPAが主流なのかもしれませんが、JPAだとデータモデルとJavaのクラスが密結合な感じがして私は使いこなせていません。自分で割と自由にSQLが書けるmybatisを好んで使っています。そんなmybatisで開発を進めていて、これは便利なんで絶対覚えておこうというものを、この前見つけましたので共有させていただきます。

やりたいこと

  • レコードのINSERT。
  • INSERT対象のテーブルの主キーはシーケンスで作成される。
  • INSERT時にシーケンスで自動採番された主キーをプログラム側で取得したい。

(主キーを取得して何がしたいかというと、、)

  • 子テーブルも一緒にINSERTしたい。そのキーに親の主キーを使う。とか
  • 登録時にユーザにIDを表示したい(契約番号とか)とか

こんなシーンを想定しています。

ソースコード

ドメイン

@Getter
@Setter
public class Posts {
private int myid;
private String content;
}

Mapper

@Mapper
public interface ContentMapper {
public int addContent(Content content);
}

XML

<insert id="addPost" parameterType="com.myProject.domain.content">
<selectKey keyProperty="id" resultType="Integer" order="BEFORE">
select NEXTVAL('content_id_seq')
</selectKey>
insert into posts values (
#{id}
,#{content}
);
</insert>

こんな感じ!XMLがポイントですね!!

INSERT後のidの取得方法

上記のMappar.addContentを呼んだ後に、以下でidが取得できます。

content.getId();

以上!

mybatis便利だなぁって私は感じてます。やっぱデータモデルはしっかりと外で定義して、サーバーサイドではSQLとか内部のDTO定義をデータモデルとは別に柔軟に書けるmybatisは結構便利だと思ってます。SQLはSQLでちゃん書きたいし。

それでは!


カツオが開発したWebサービスです。

「セールサーチ」ネットショップのセール情報の検索サイト!

平成の想い出を気軽に年表にしてシェアすることができるサービスです。ぜひ使ってみてください。

カテゴリー: java

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です