Spring + MyBatisの@Optionsアノテーションでサロゲートキーを取得する方法
前提
src/main/resources配下にschema.sqlを配置します。中身は以下の通りとします。(ID列はAUTO_INCREMENTしていること)
CREATE TABLE IF NOT EXISTS employee ( id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(60) NOT NULL, age BIGINT NOT NULL ); CREATE SEQUENCE IF NOT EXISTS SEQ_ID;
Spring スタータープロジェクトで選択する依存関係は以下の通りとします。
@Mapperアノテーションを付与したインタフェースのメソッドに、@Insertアノテーションを付与します。
@InsertアノテーションにはSQL文を記述します。
従業員を表すPOJOです。
package jp.co.confrage.entity; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; @Setter @Getter @AllArgsConstructor public class Employee { private Long id; private String name; private Integer age; }
従業員テーブルを操作するマッパーインタフェースです。insertメソッドの引数にPOJOのインスタンスを渡します。
@OptionsアノテーションのuseGeneratedKeys,keyProperty,keyColumnはインサートかアップデートの時のみ使えるプロパティです。
package jp.co.confrage.repository; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Options; import org.apache.ibatis.annotations.Param; import jp.co.confrage.entity.Employee; @Mapper public interface EmployeeMapper { @Insert("insert into employee (name,age) values (#{emp.name}, #{emp.age})") @Options(useGeneratedKeys = true, keyProperty = "emp.id", keyColumn = "id") int insert(@Param("emp") Employee employee); }
@Mapperアノテーションを付与することで、DIが可能になります。
REST Controllerです。
package jp.co.confrage.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import jp.co.confrage.repository.EmployeeMapper; import lombok.RequiredArgsConstructor; @RequiredArgsConstructor @RestController public class DemoController { private final EmployeeMapper employeeMapper; @GetMapping("/sample") public String sample() { final var emp = new Employee(null, "yamada", 35); // この時点でIDはnull final var result = employeeMapper.insert(emp); // この時点でIDはSEQUENCEオブジェクトのnextvalが設定されている System.out.println(result); // insert件数 return "sample"; } }
Spring Bootアプリケーションを起動し、curlコマンドを実行します。
curl -X GET http://localhost:8080/sample
以下が標準出力されます。
1
mybatis – MyBatis 3 | Java API
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント