ORM を扱う章では、この教材では Spring Data JPA を使います。
対象コード:
- PlayerEntity.java
- PlayerRepository.java
- PlayerService.java
- PlayerController.java
- PlayerServiceTest.java
- PlayerRepositoryTest.java
- PlayerControllerTest.java
- ORM は
Spring Data JPAを採用する - 永続化の実体は
Repositoryに閉じ込める - ビジネスロジックは service 層に寄せ、entity に責務を詰め込みすぎない
- entity / repository / service / controller の責務分離を学ぶ
@DataJpaTestを使った永続化テストを学ぶ- JPA の都合でドメイン設計が崩れやすい点を理解する
POST /playersで player を作るGET /players/{id}で 1 件取得するGET /playersで一覧を返すPATCH /players/{id}で更新するDELETE /players/{id}で削除する
- Java オブジェクトとしてユースケースを検証する
- repository は fake か mock に置き換える
- repository のクエリや永続化マッピングを検証する
- まずはインメモリ DB、必要になったら
Testcontainersへ進む
- HTTP 契約だけを検証する
- service を mock に差し替える
今回は @SpringBootTest までは使っていません。まずは controller / service / repository を分けて、それぞれの責務を小さいテストで押さえることを優先しています。
@EntityJpaRepository- sorting
- transaction boundary
@Version- 楽観ロック
- ORM を入れる章では
Spring Data JPAを使う - まず controller からではなく service の振る舞いから始める
- repository は interface として扱い、テストで役割を明確にする
@Embeddable- paging
- specification / query method
Testcontainersを使った DB 統合テスト