JPA と DB 連携

Spring Data JPA を使うと、DB アクセスの定型コードを大幅に削減できます。ここでは Entity / Repository / Service の最小構成を示します。

Entity

@Entity
@Table(name = "books")
public class Book {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  @Column(nullable = false)
  private String title;
}

Repository

public interface BookRepository extends JpaRepository<Book, Long> {
  List<Book> findByTitleContaining(String keyword);
}

Service

@Service
public class BookService {
  private final BookRepository repository;

  public BookService(BookRepository repository) {
    this.repository = repository;
  }

  public List<Book> list() {
    return repository.findAll();
  }
}

処理フロー

  1. Controller がリクエストを受ける
  2. Service が業務ロジックを実行する
  3. Repository が DB にアクセスする
  4. 結果を DTO に変換してレスポンスへ返す

Entity をそのまま API レスポンスに返すと、将来の項目追加や循環参照で問題が起きやすくなります。DTO を挟む設計を推奨します。