menu
書いてる野郎
orebike@gmail.com
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 を自動採番する場合その値そのものが欲しくなるので useGeneratedKeys
を true
にセットした後、keyProperty
を設定する。こうするとこのメソッドに渡した Domain に参照を通じてこの自動採番された ID がセットされるという仕組みになる。呼び出した側は受け渡した Domain の参照を通じて自動採番された ID を知ることができるということ。
まどろっこしいが、現状これ。
凝った後処理は別の層でやってくれということである。