カテゴリ: Spring認証(Spring Security) 更新日: 2026/01/07

ユーザー情報をデータベースに保存する方法とは?Springのエンティティクラスを使った基本解説

ユーザー情報をデータベースに保存する方法
ユーザー情報をデータベースに保存する方法

新人と先輩の会話形式で理解しよう

新人

「先輩、ユーザー情報ってどうしてデータベースに保存するんですか?」

先輩

「アプリでログインや会員登録を実現するには、ユーザーの名前やパスワードなどの情報をどこかに保持しておく必要があります。その保存先がデータベースなんだ。」

新人

「なるほど。じゃあ、その情報を保存するにはどうすれば良いんですか?」

先輩

「Springでは、エンティティクラスを使ってユーザー情報をデータベースに保存する準備をするんだ。具体的には、@Entityアノテーションを使ってUserクラスを作るよ。」

新人

「@Entityって何ですか?」

先輩

「@Entityは、このクラスがデータベースのテーブルとして扱われることを示すアノテーションだよ。では、順番に解説していこうか。」

1. なぜユーザー情報をデータベースに保存するのか(認証との関係)

1. なぜユーザー情報をデータベースに保存するのか(認証との関係)
1. なぜユーザー情報をデータベースに保存するのか(認証との関係)

Webアプリケーションにおいて「ユーザー情報をデータベースに保存」する理由は、ログインや会員登録などの「認証処理」を正しく行うためです。たとえば、メールアドレスとパスワードでログインする機能を作るとき、入力された情報が正しいかどうかを確認する必要があります。

その確認には、あらかじめ保存されたユーザー情報が必要です。Springでは、データベースに保存されたユーザー情報をもとにして、ログイン時に入力された情報と照合を行います。照合する情報には、ユーザー名、パスワード、メールアドレス、権限情報などが含まれます。

このように、ユーザーの情報は一時的なものではなく、アプリケーションの動作において重要なデータです。そのため、永続的に保存されるデータベースに登録する必要があります。Springフレームワークでは、ユーザー情報を管理するためのエンティティクラスを作成し、それを使ってデータベースとのやり取りを実現します。

2. エンティティクラス(Userクラス)の作成と意味

2. エンティティクラス(Userクラス)の作成と意味
2. エンティティクラス(Userクラス)の作成と意味

Springで「ユーザー情報をデータベースに保存」するには、まず「Userエンティティクラス」を作成します。このクラスは、データベースの「users」テーブルと連動するように設計されます。エンティティとは、簡単に言うと「データベースのテーブルに対応するJavaのクラス」のことです。

エンティティクラスには、ユーザーの名前、メールアドレス、パスワードなどの情報をプロパティとして定義します。そして、@Entityというアノテーションを付けることで、「このクラスはエンティティです」とSpringに伝えます。

以下は、基本的なUserエンティティクラスの例です。


package com.example.demo.entity;

import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String username;
    private String email;
    private String password;

    // GetterとSetterは省略可(Lombokを使わない場合は記述)
}

このUserクラスには、次のような意味があります:

  • @Entity:このクラスがエンティティであることを示します。
  • @Id:主キー(Primary Key)となるフィールドに付けます。
  • @GeneratedValue:IDを自動採番にする指定です。
  • username, email, password:それぞれ、ユーザーの名前、メールアドレス、パスワードの情報を保持します。

このように、Springではエンティティクラスを通じてユーザー情報を構造的に表現し、それをデータベースのテーブルと紐づけることで、「データベースに保存」する仕組みを構築します。

このUserクラスは、のちにSpring Data JPAのリポジトリインターフェースと組み合わせることで、ユーザー情報の登録・取得・更新・削除といった基本操作が簡単に行えるようになります。

3. Spring Data JPAを使ったリポジトリインターフェースの作成

3. Spring Data JPAを使ったリポジトリインターフェースの作成
3. Spring Data JPAを使ったリポジトリインターフェースの作成

次に、「ユーザー情報をデータベースに保存」するために必要なリポジトリインターフェースを作成します。Springでは、データベース操作を行うために@Repositoryアノテーションを使ったクラスやインターフェースを用意します。

しかし、Spring Data JPAを利用することで、データベース操作に必要な処理の多くを自動で行ってくれます。開発者はインターフェースを定義するだけで、ユーザー登録や検索、削除といった基本的な処理を簡単に実装できます。

このリポジトリインターフェースには、エンティティクラスと主キーの型を指定するだけです。以下のコードは、Userエンティティに対応したリポジトリの例です。


package com.example.demo.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.example.demo.entity.User;

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

}

このコードの中で重要なポイントを見ていきましょう。

  • @Repository:このインターフェースがリポジトリであることを示します。
  • JpaRepository:Spring Data JPAが提供するインターフェースで、データベース操作の基本機能(保存・検索・削除など)を備えています。
  • User, Long:対象のエンティティクラス(User)と主キーの型(Long)を指定しています。

このように、Spring Data JPAのリポジトリを作ることで、ユーザー情報を保存する処理がとても簡単になります。

4. ユーザー情報を登録するためのコントローラの作成(@Controller)

4. ユーザー情報を登録するためのコントローラの作成(@Controller)
4. ユーザー情報を登録するためのコントローラの作成(@Controller)

次に、@Controllerを使って、フォームから送信されたユーザー情報をデータベースに保存する処理を実装します。

コントローラは、Web画面とサーバー側の処理をつなぐ役割を持つクラスです。Springでは、@Controllerアノテーションを使ってクラスをコントローラとして指定し、ユーザーが送信したデータを受け取り、リポジトリを通じて保存する流れを作ります。

以下は、簡単なユーザー登録用のコントローラクラスの例です。


package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import com.example.demo.entity.User;
import com.example.demo.repository.UserRepository;

@Controller
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserRepository userRepository;

    @PostMapping("/register")
    public String registerUser(@ModelAttribute User user) {
        userRepository.save(user);
        return "redirect:/user/success";
    }
}

このコントローラでは、次のようなポイントをおさえています。

  • @Controller:このクラスがSpring MVCのコントローラであることを示します。
  • @RequestMapping:URLのプレフィックス(/user)を定義します。
  • @PostMapping("/register")/user/registerにPOSTでリクエストが来たときの処理を定義します。
  • @ModelAttribute User user:フォームから送信されたユーザー情報をUserオブジェクトに自動的にバインドします。
  • userRepository.save(user):ユーザー情報をデータベースに保存します。
  • redirect:/user/success:登録成功後に別ページへリダイレクトします。

このように、@Controllerを使ってユーザー登録の処理を受け取り、リポジトリを通じてユーザー情報をデータベースに保存することで、アプリケーションに必要な基本機能を実現することができます。

なお、この例ではビューとしてHTMLファイルを用いる構成を想定しています。@RestControllerを使う方法もありますが、今回の開発環境では@Controllerを使用する前提なので注意しましょう。

また、データバインドや入力チェックを行いたい場合には、@ValidBindingResultなどを併用して、バリデーション処理を追加することも可能です。

5. 登録フォームのHTML作成と@ModelAttributeの使い方

5. 登録フォームのHTML作成と@ModelAttributeの使い方
5. 登録フォームのHTML作成と@ModelAttributeの使い方

それでは、実際に画面からユーザー情報を入力するためのHTMLフォームを作成してみましょう。Spring MVCでは、@ModelAttributeを使ってフォームから送信された値をJavaオブジェクトにバインドします。

フォームの画面では、th:objectを使って、Userオブジェクトと紐づけた状態で入力項目を用意します。以下は、Thymeleafを使用したユーザー登録フォームの例です。


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>ユーザー登録フォーム</title>
</head>
<body>
    <h2>ユーザー登録</h2>
    <form th:action="@{/user/register}" th:object="${user}" method="post">
        <label for="username">ユーザー名:</label>
        <input type="text" id="username" th:field="*{username}" /><br><br>

        <label for="email">メールアドレス:</label>
        <input type="email" id="email" th:field="*{email}" /><br><br>

        <label for="password">パスワード:</label>
        <input type="password" id="password" th:field="*{password}" /><br><br>

        <button type="submit">登録</button>
    </form>
</body>
</html>

このフォームのポイントを整理してみましょう。

  • th:object="${user}":コントローラから渡されたUserオブジェクトをフォームと関連づけます。
  • th:field="*{プロパティ名}":Userオブジェクトの各プロパティとフォームの入力値を自動的にバインドします。
  • th:action="@{/user/register}":フォームの送信先URLを指定します。

このように、Spring MVCでは@ModelAttributeを利用することで、フォームからユーザー登録を簡単に行うことができます。

実際の画面では、入力された値がUserクラスのプロパティに対応して保存され、そのままコントローラに渡される仕組みになっています。

6. ユーザー情報を画面から入力して保存する流れ(フォーム送信→Controller→Repository)

6. ユーザー情報を画面から入力して保存する流れ(フォーム送信→Controller→Repository)
6. ユーザー情報を画面から入力して保存する流れ(フォーム送信→Controller→Repository)

ここまでで、エンティティ、リポジトリ、コントローラ、HTMLフォームがそろいました。最後に、ユーザー情報を保存する一連の流れを整理してみましょう。

ユーザーがWeb画面から情報を入力し、「登録」ボタンを押すと、以下の順で処理が進みます。

  1. HTMLフォームで入力されたユーザー名、メールアドレス、パスワードなどのデータがサーバーに送信される。
  2. @Controllerで受け取ったデータは、@ModelAttributeを通じてUserオブジェクトに変換される。
  3. UserRepositorysave()メソッドを使って、データベースにUser情報が保存される。
  4. 保存が成功すると、redirect:で指定されたURLにリダイレクトされ、完了画面などが表示される。

実際の処理の流れをもう一度、関連するコードで見てみましょう。

ユーザー情報の入力(フォーム)


<form th:action="@{/user/register}" th:object="${user}" method="post">
    <input type="text" th:field="*{username}" />
    <input type="email" th:field="*{email}" />
    <input type="password" th:field="*{password}" />
    <button type="submit">登録</button>
</form>

ユーザー情報の受け取りと保存(コントローラ)


@PostMapping("/register")
public String registerUser(@ModelAttribute User user) {
    userRepository.save(user);
    return "redirect:/user/success";
}

ユーザー情報の保存(リポジトリ)


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

このように、Spring MVC フォームを使った入力から、@ModelAttributeによるデータの受け取り、そしてSpring Data JPAのsave()メソッドによる保存処理まで、流れがとても自然に構成されています。

フォームに入力した内容がそのままUserクラスに変換され、ユーザー情報をデータベースに保存できる仕組みは、Springの大きな魅力のひとつです。

また、今回紹介した仕組みは、フォームからユーザー登録を行う基本構成として非常に重要な部分なので、今後ログイン処理やバリデーションなどに進む際の土台になります。

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

なぜユーザー情報をデータベースに保存する必要があるのですか?

ユーザー情報をデータベースに保存する理由は、ログイン機能や会員登録、認証処理を行うためです。メールアドレスやパスワードなどの情報を永続的に保存し、ログイン時に照合することで本人確認ができる仕組みになっています。
コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

カテゴリの一覧へ
新着記事
New1
Spring認証(Spring Security)
Spring BootでCORSを設定する方法を完全解説!初心者でもわかるセキュリティ対策
New2
Spring認証(Spring Security)
パスワードをハッシュ化する理由とは?セキュリティ対策の基本をSpring Securityで学ぼう
New3
SpringのWeb開発(Spring MVC)
HTTPリクエストとレスポンスの基本を完全解説!Spring MVC初心者がWeb通信の仕組みをやさしく理解
New4
Spring認証(Spring Security)
ブラウザからのフォーム送信とは?HTTPリクエストの基礎を初心者向けに解説!
人気記事
No.1
Java&Spring記事人気No1
SpringのWeb開発(Spring MVC)
ルーティングとは?基本概念(Spring MVCのURL制御を理解)
No.2
Java&Spring記事人気No2
Thymeleaf
Thymeleaf とは?初心者向けにThymeleafの基本を徹底解説
No.3
Java&Spring記事人気No3
Springの基本
application.properties と YAML の基本をやさしく解説!初心者向けSpring Boot設定ファイル入門
No.4
Java&Spring記事人気No4
Springの基本
Spring Bootのデフォルトログ設定を徹底解説(Logback / SLF4J)
No.5
Java&Spring記事人気No5
Springの基本
Spring Bootの環境変数の設定方法をやさしく解説!初心者向けapplication.propertiesの使い方
No.6
Java&Spring記事人気No6
SpringのWeb開発(Spring MVC)
ループ処理(th:each)の基本を完全ガイド!Thymeafの繰り返し処理の使い方
No.7
Java&Spring記事人気No7
SpringのDB操作
JPAの標準クエリメソッド(findById, findAll)を完全解説!初心者でもわかるデータ取得の基本
No.8
Java&Spring記事人気No8
Spring認証(Spring Security)
セッション管理の基本(@SessionAttributes)を完全解説!初心者でもわかるセッションの仕組み