【Spring Boot】Repository層の役割をやさしく解説

Java入門・実践
スポンサーリンク
スポンサーリンク

はじめに

Spring Boot のアプリを作っていると、
Controller / Service / Repository の 3 つの層をよく目にします。

その中でも Repository 層 は、
「DB とやり取りする場所」というイメージはあるものの、
どこまで書くべきか迷いやすい層です。

この記事では、Repository 層の役割を
やさしく・実務寄り で整理していきます。

まずは全体像から見ていきましょう。


Repository 層とは

一言でいうと、

「データベースとのやり取りを担当する“データ係”の層」

です。

三層アーキテクチャでは、

  • Controller → 受付
  • Service → 業務ロジック
  • Repository → データアクセス

という役割分担になっています。

Repository は、 アプリとデータベースの橋渡し をする層です。


Repository 層の役割を具体的に整理する

データの取得(SELECT)

最も基本的な役割です。

Java
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}

Spring Data JPA を使えば、
findByIdfindAll が自動で使えます。

データの保存(INSERT / UPDATE)

新規作成や更新も Repository の役割です。

Java
userRepository.save(user);

Service 層でロジックを組み立て、
Repository 層で保存します。

データの削除(DELETE)

削除も Repository の担当です。

Java
userRepository.deleteById(id);

クエリメソッドで検索条件を表現する

Spring Data JPA の便利機能です。

Java
List<User> findByAgeGreaterThan(int age);

SQL を書かなくても検索できます。

@Query で独自クエリを書く

複雑な検索は @Query を使います。

Java
@Query("SELECT u FROM User u WHERE u.name LIKE %:keyword%")
List<User> search(@Param("keyword") String keyword);

DB に依存する処理をまとめる

Repository は DB に近い層なので、
データアクセスに関する処理はここに集約 します。

例:

  • ページング
  • ソート
  • ネイティブクエリ
  • トランザクション境界の内側で必要な処理

Repository 層に書かないこと

業務ロジック

NG

Java
if (user.getAge() < 20) { ... }

これは Service の役割です。

入力チェック

NG

Java
if (name == null) { ... }

形式的なチェックは Controller / DTO、
業務的なチェックは Service です。

レスポンスの整形

NG

Java
return new UserResponse(user);

レスポンスの形は Controller が決めます。

外部 API の呼び出し

Repository は DB に集中します。


実務でよくあるアンチパターン

Repository にロジックを書きすぎる

→ DB に依存した設計になり、変更に弱くなります。

Service が薄くなり、Repository が太る

→ 三層アーキテクチャの意味がなくなります。

Controller から直接 Repository を呼ぶ

→ テストしにくく、ロジックが散らばります。


Repository 層をもっと活かすポイント

Spring Data JPA を使う

  • save
  • findById
  • findAll
  • delete
    などが自動で使えるため、実装がシンプルになります。

クエリメソッドを活用する

Java
findByEmailAndStatus(String email, Status status)

@Query で柔軟に検索

複雑な検索も簡単に書けます。

ページング・ソートを活用

Java
Page<User> findAll(Pageable pageable);

まとめ

Repository 層は、
「データベースとのやり取りを担当する層」
です。

  • データの取得
  • 保存
  • 更新
  • 削除
  • クエリメソッドや @Query の活用
  • DB に依存する処理の集約

難しく聞こえますが、
「Repository はデータ係、Service は頭脳、Controller は受付」
と理解できれば十分です。

decopon
decopon

Repository 層の役割を理解すると、
三層アーキテクチャの全体像が一気にクリアになります。
データアクセスをきれいに分離するだけで、
設計もテストもぐっと楽になります。
あなたの開発が、今日より少しだけ楽になりますように。

moco
moco

データ係って、裏でこっそり支えてくれる感じがしてかわいいね…

コメント

タイトルとURLをコピーしました