Spring Boot + MySQLでCRUDアプリを作ろう!初心者向けにデータベース操作を完全解説
新人
「Spring BootとMySQLを使って、実際にデータを保存したり取り出したりするアプリってどうやって作るんですか?」
先輩
「それならCRUDアプリを作ると、基本的な操作を一通り学べるよ。Spring BootとMySQLは相性が良くて、Java初心者でも理解しやすい構成なんだ。」
新人
「CRUDってよく聞くんですけど、何の略なんですか?」
先輩
「よし、それじゃまずはCRUDの意味からしっかり整理していこう!」
1. CRUDとは何か?
Spring BootでMySQLを使ったアプリを作るときによく出てくるのが「CRUD(クラッド)」という言葉です。これはデータベース操作の基本である4つの処理を指しています。
- Create(作成):新しいデータをデータベースに登録する
- Read(読み取り):登録されたデータを検索して取り出す
- Update(更新):既存のデータを変更する
- Delete(削除):不要になったデータを消す
この4つの処理ができるアプリを「CRUDアプリ」と呼びます。例えば、会員情報の管理や、商品の登録・編集など、多くのシステムはこのCRUDを基本としています。
Spring BootとMySQLを使えば、このCRUD処理を効率的に実装できます。特にSpring Data JPAという機能を使えば、複雑なSQL文を書かなくても、リポジトリインターフェースにメソッドを定義するだけで簡単にデータベースとやり取りできます。
2. Spring Boot + MySQLを使ったアプリ開発の全体像
Spring BootとMySQLを使ったCRUDアプリの作成は、以下のような流れで進めます。
- Spring Bootプロジェクトの作成(Pleiades+Gradle使用)
- MySQLとの接続設定(
application.propertiesの編集) - エンティティクラス(データ構造)の作成
- リポジトリインターフェースの作成(Spring Data JPA)
- コントローラークラスの作成(@Controller使用)
- 画面(HTMLテンプレート)の作成(Thymeleaf)
この構成で開発を進めることで、Java初心者でも自然と「MVCアーキテクチャ(Model-View-Controller)」を学ぶことができます。
Spring Bootは、複雑な設定を簡単にしてくれるフレームワークであり、Gradleを使えば依存関係の管理もスムーズです。Pleiadesを使ってプロジェクトを作成する際には、Spring WebやSpring Data JPA、MySQL Driverの依存関係をチェックして追加しましょう。
実際のアプリでは、たとえば「ユーザー管理アプリ」として、次のような機能を持たせます。
- ユーザー情報の新規登録(Create)
- ユーザー一覧の表示(Read)
- ユーザー情報の編集(Update)
- ユーザーの削除(Delete)
次回は、この中でも最初のステップである「データベースとの接続設定」から具体的な実装に入っていきます。Spring BootとMySQLを連携させるためには、application.propertiesファイルの記述や、データベースの準備が必要になります。
初心者でも順を追って作業していけば、自然にCRUDアプリを構築できるようになるので、焦らず一つずつ学んでいきましょう。
3. データベースの接続設定
Spring BootアプリケーションをMySQLと接続するには、application.propertiesファイルに必要な情報を記述します。まずは、MySQLにあらかじめデータベースを作成しておきましょう。
例えば、「spring_crud」という名前のデータベースをMySQLに作成しておきます。MySQLにログインして以下のようにコマンドを実行します。
CREATE DATABASE spring_crud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
次に、Pleiades上で作成したSpring Bootプロジェクトのsrc/main/resources/application.propertiesファイルを開き、以下のように接続設定を記述します。
spring.datasource.url=jdbc:mysql://localhost:3306/spring_crud?useSSL=false&serverTimezone=Asia/Tokyo
spring.datasource.username=root
spring.datasource.password=yourpassword
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.thymeleaf.cache=false
spring.datasource.urlの中で「spring_crud」としている部分は、作成したデータベース名と一致させてください。また、ユーザー名やパスワードもご自身のMySQL環境に合わせて変更してください。
spring.jpa.hibernate.ddl-auto=updateの設定により、エンティティの定義に基づいてテーブルが自動で作成・更新されます。
4. エンティティとリポジトリの作成
MySQLとの接続が完了したら、次にエンティティクラスとリポジトリインターフェースを作成します。ここでは「User」という名前のデータを管理する想定で進めます。
まず、エンティティクラスをcom.example.demo.entityパッケージに作成します。
package com.example.demo.entity;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private int age;
// GetterとSetterは省略可能(Lombok使用しない前提)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
次に、リポジトリインターフェースをcom.example.demo.repositoryパッケージに作成します。
package com.example.demo.repository;
import com.example.demo.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
}
JpaRepositoryを継承することで、基本的なCRUD操作が自動的に使えるようになります。これにより、SQLを書かなくてもデータベース操作が可能になります。
5. データ登録処理(Create)の実装
それでは、作成したUserエンティティをもとに、ユーザー情報を登録する画面と処理を実装していきます。まずはHTMLフォームを表示するコントローラを作成します。
package com.example.demo.controller;
import com.example.demo.entity.User;
import com.example.demo.repository.UserRepository;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@Controller
public class UserController {
private final UserRepository userRepository;
public UserController(UserRepository userRepository) {
this.userRepository = userRepository;
}
@GetMapping("/user/new")
public String showForm(Model model) {
model.addAttribute("user", new User());
return "user-form";
}
@PostMapping("/user/save")
public String saveUser(User user) {
userRepository.save(user);
return "redirect:/user/new";
}
}
ここでは、/user/newにアクセスすると入力フォームを表示し、/user/saveにPOST送信されるとデータがMySQLに保存されるようになっています。
次に、Thymeleafを使ったHTMLフォームを作成します。src/main/resources/templates/user-form.htmlに以下のように記述します。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>ユーザー登録</title>
</head>
<body>
<h1>ユーザー登録フォーム</h1>
<form th:action="@{/user/save}" th:object="${user}" method="post">
名前:<input type="text" th:field="*{name}" /><br>
年齢:<input type="number" th:field="*{age}" /><br>
<button type="submit">登録</button>
</form>
</body>
</html>
このフォームから入力された情報は、Userオブジェクトとしてコントローラに渡され、そのままリポジトリ経由でMySQLに保存されます。
これでSpring Boot + MySQLの環境におけるデータ登録処理(Create)の基本が完成しました。次回は、登録されたデータの一覧表示(Read)を実装していきます。
6. データ取得と一覧表示(Read)の実装
続いては、MySQLに保存されたユーザーデータを一覧表示する「Read(読み取り)」の処理を実装していきます。Spring Bootでは、リポジトリのfindAllメソッドを使うことで、全データの取得が簡単に行えます。
まず、コントローラにユーザー一覧を取得して表示する処理を追加します。
@GetMapping("/user/list")
public String listUsers(Model model) {
List<User> users = userRepository.findAll();
model.addAttribute("users", users);
return "user-list";
}
userRepository.findAll()を使って全件取得し、Modelに追加してHTMLに渡しています。次に、このデータを表示するためのテンプレートファイルを作成します。
src/main/resources/templates/user-list.htmlに以下のHTMLを作成してください。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>ユーザー一覧</title>
</head>
<body>
<h1>登録済みユーザー一覧</h1>
<table border="1">
<tr>
<th>ID</th>
<th>名前</th>
<th>年齢</th>
<th>操作</th>
</tr>
<tr th:each="user : ${users}">
<td th:text="${user.id}"></td>
<td th:text="${user.name}"></td>
<td th:text="${user.age}"></td>
<td>
<a th:href="@{'/user/edit/' + ${user.id}}">編集</a> |
<a th:href="@{'/user/delete/' + ${user.id}}">削除</a>
</td>
</tr>
</table>
</body>
</html>
これで、データ取得と一覧表示が可能になります。ユーザーの編集と削除へのリンクも用意しておくことで、次のステップにスムーズにつなげることができます。
7. データ更新処理(Update)の実装
次は、既存のユーザーデータを編集できるように「Update(更新)」処理を実装します。まず、IDを指定してユーザー情報を取得し、フォームに表示するコントローラを作成します。
@GetMapping("/user/edit/{id}")
public String editUser(@PathVariable("id") Long id, Model model) {
User user = userRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("無効なIDです:" + id));
model.addAttribute("user", user);
return "user-form";
}
この処理では、URLパスの{id}を使ってユーザーを検索し、フォームに情報を再表示します。先ほど作成したuser-form.htmlがそのまま使えます。
そのまま編集した内容を再度/user/saveに送信することで、データが上書き保存されます。リポジトリのsaveメソッドは、新規作成と更新の両方に対応しているため、同じメソッドで対応可能です。
8. データ削除処理(Delete)の実装
最後に、不要なユーザーを削除する「Delete(削除)」処理を実装します。まずは、IDを受け取って該当ユーザーを削除するコントローラを作成します。
@GetMapping("/user/delete/{id}")
public String deleteUser(@PathVariable("id") Long id) {
userRepository.deleteById(id);
return "redirect:/user/list";
}
deleteByIdメソッドを使うことで、指定されたIDのデータをMySQLから削除できます。処理後は一覧ページにリダイレクトされます。
削除処理は確認画面などを設けるとより丁寧ですが、ここでは基本的な機能に絞って説明しています。
これで、Spring BootとMySQLを使った基本的なCRUD(作成・読み取り・更新・削除)のすべての処理が実装できました。
今回の構成では、@Controllerを使ったSpring MVC構成に従って、エンティティ・リポジトリ・コントローラ・テンプレートを連携させながらCRUD機能を実現しました。Gradle構成で依存関係もシンプルに保ち、Pleiades環境で簡単に動作させられるよう設計しています。
Spring BootとMySQLの組み合わせは、Java初心者が実践的なアプリケーションを作成するのに最適な技術スタックです。今回紹介した手順をベースに、検索機能やバリデーションなどを加えて、自分だけのCRUDアプリを成長させていきましょう。