自動生成したMapperとEntityを使って、updateをする方法
いくつかメソッドがあり、素直に書くと無駄が多かったのでメモ。
最初の実装
- updateByPrimaryKey()を使う
- selectByPKey()で更新対象のrecordを取得してEntityに保持
- Entityの中身をsetXX()で値変える
- updateByPrimaryKey(record)で更新
これで流れるSQL
update TABLE set col1 = ?, col2 = ? …(全項目)… where key = ?
別の方法
- updateByPrimaryKeySelective()を使う
- 空のrecordのEntityを作成
- keyと、変えたい値(col1)だけset
- updateByPrimaryKeySelective(record)で更新
これで流れるSQL
update TABLE set col1 = ? where key = ?
MyBatisは使ってなかったけど、過去のPJではレコードを取得⇒更新の流れが普通だったので意識してなかったが、
Keyだけ指定して更新の方が確実で無駄が無いので良い。
もし、空のEntityじゃなくて取得した物を使ってSelectiveを呼ぶ場合、「更新対象の項目」かどうか判断するのは
「項目がnullかどうか」らしいので、注意。(まぁkeyだけセットするのが普通かな)