Mapper.upsertってなんだろう...
既存のソースコードの修正作業を行っていた際、DBの更新処理中に、"upsert"と定義されたMapperクラスのメソッドがありました。なんだろう?と思って中身を見てみると...
完全に初心者の備忘録です。温かい目で見守ってださい!
INSERT + UPDATE = ON DUPLICATE KEY UPDATE!!
その中身は、ON DUPLICATE KEY UPDATEでした!
このステートメントは、INSERTで指定した値のPRIMARY KEY、もしくはUNIQUEインデックスがすでにテーブルに存在している場合、そのレコードに対してUPDATEを実行することができる構文です。
SELECT(レコードが存在するか)
INSERT(存在しない場合新規登録)
UPDATE(存在する場合は値を更新)
上記のクエリを一気に実行してくれる、ということになります。なんてありがたい。
INSERT INTO tableA (
NAME,
AGE,
ID,
ADRESS
) VALUES (
#{name},
#{age},
#{id},
#{adress}
)
ON DUPLICATE KEY UPDATE
NAME = #{name},
AGE = #{age}...
注意点
このステートメントを使用する際は、「対象のテーブルにユニーク制約またはプライマリキーが設定されている」ことを確認する必要があり、これがないと重複が正しく検出されないそうです。
まとめ
ステートメントが便利なことは大前提として、"upsert"というネーミングに、感動してしまいました(笑)。私もこんなふうにスマートなネーミングができるようになりたい!