Spring Boot / MyBatis / Mapper / insert

Spring Boot / MyBatis / Mapper / insert

insert 用の書き方

Java でのインターフェース側をこのように定義する。insert でできることは非常に少ないのでおそらくどんな仕様の実装でも入れたい Domain を1個だけ取るという簡単な実装になる。 凝ったことをやるなら別の層で受け止めたほうがよい。

@Mapper
public interface HogeMapper {
    public int create(Hoge hoge);
}

名前はどうでもいい。Domain のクラスを引数の取るようにする。 戻りは挿入したレコード数となるのだが、1もしくは0だろう。

XML 側はこのようにする。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="jp.co.unko.mapper.HogeMapper">
  <insert id="create" useGeneratedKeys="true" keyProperty="hogeId">
    INSERT INTO
        hoge
        (
            name,
            memo
        )
    VALUES
        (
            #{name},
            #{memo}
        )
  </insert>
</mapper>

この場合では hogeId というカラムがあって、それが AUTO_INCREMENT による自動採番の場合を想定している。自動採番なのでフィールド指定に hogeId は無い。

そして #{piyo} のような記述でプレースホルダが書ける。これは Domain の getter と対応して書くことができる。

このような PK を自動採番する場合その値そのものが欲しくなるので useGeneratedKeystrue にセットした後、keyProperty を設定する。こうするとこのメソッドに渡した Domain に参照を通じてこの自動採番された ID がセットされるという仕組みになる。呼び出した側は受け渡した Domain の参照を通じて自動採番された ID を知ることができるということ。 まどろっこしいが、現状これ。

凝った後処理は別の層でやってくれということである。

java/spring/spring_boot/mybatis/mapper/insert/start.txt · 最終更新: 2021-06-28 12:56 by ore