Spring Boot JPA入門:エンティティ/リポジトリの基本と作り方
生徒
「Spring Bootでデータベースと連携したいんですが、JPAって何から始めればいいですか?」
先生
「JPAを使えば、オブジェクトとデータベースのテーブルを自動で紐づけてくれますよ。まずはエンティティとリポジトリの基本から学ぶといいですね。」
生徒
「なるほど。エンティティって何ですか?リポジトリって何をするんですか?」
先生
「よし、じゃあSpring Boot JPAの基本的な使い方を、エンティティとリポジトリの作成手順と一緒に確認してみましょう。」
1. Spring BootとJPAの関係とは?
Spring Bootは、JavaでWebアプリケーションを簡単に開発できるフレームワークです。そして、JPA(Java Persistence API)は、オブジェクトとデータベースのテーブルをマッピングするための仕組みです。Spring Bootでは、JPAを使うことでSQLを書かずにデータベース操作が可能になります。初心者でもエンティティクラスとリポジトリインターフェースを用意するだけで簡単に使い始めることができます。
2. エンティティクラスとは何か?
エンティティ(Entity)クラスは、データベースのテーブルと1対1で対応するJavaクラスです。たとえば、ユーザー情報を管理する場合、「User」エンティティを作成します。このクラスにアノテーションをつけることで、どのフィールドが主キーか、どのカラムに対応するかを定義できます。
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.GeneratedValue;
@Entity
public class User {
@Id
@GeneratedValue
private Long id;
private String name;
private String email;
// getterとsetterを省略
}
3. リポジトリインターフェースの役割と作り方
リポジトリ(Repository)は、データベースへのアクセスを担当する部分です。Spring Data JPAを使えば、インターフェースを定義するだけで、自動的にCRUD操作(登録・取得・更新・削除)ができるようになります。以下のようにJpaRepositoryを継承することで、簡単にデータアクセスが可能になります。
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
// nameで検索するメソッド
List<User> findByName(String name);
}
4. Spring BootでJPAを使うための設定
Spring BootでJPAを使うには、application.propertiesまたはapplication.ymlにデータベース接続情報を記述する必要があります。以下は一般的なMySQLの設定例です。
spring.datasource.url=jdbc:mysql://localhost:3306/sampledb
spring.datasource.username=root
spring.datasource.password=yourpassword
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
この設定を行うことで、Spring Boot起動時にテーブルが自動生成され、ログにSQLも出力されるようになります。
5. データを登録・検索する方法
実際にコントローラーからリポジトリを使ってデータベース操作を行ってみましょう。たとえば、ユーザー登録や一覧取得のコードは以下のようになります。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserRepository userRepository;
@PostMapping
public User create(@RequestBody User user) {
return userRepository.save(user);
}
@GetMapping
public List<User> findAll() {
return userRepository.findAll();
}
@GetMapping("/search")
public List<User> findByName(@RequestParam String name) {
return userRepository.findByName(name);
}
}
6. Spring Boot JPAの自動テーブル生成と注意点
JPAでは、エンティティクラスを定義するだけで、自動的にテーブルが作成されます。ddl-auto=updateに設定することで、変更があれば自動でテーブルが更新されます。ただし、本番環境ではこの自動更新は推奨されないため、マイグレーションツール(FlywayやLiquibase)の使用が一般的です。
7. JPAを使うメリットとは?
Spring Boot JPAを使うと、SQLを書かずに簡単にデータベース操作が可能になります。また、エンティティクラスにアノテーションをつけるだけで自動的にテーブルを作成し、リポジトリでデータ取得が簡単に行えるため、初心者でも理解しやすく、安全でメンテナンス性の高いコードを書くことができます。
8. 実務でよく使うアノテーションの一覧
JPAでよく使うアノテーションには以下のようなものがあります。
@Entity:テーブルにマッピングするクラスに指定@Id:主キーに指定@GeneratedValue:自動採番@Column:カラムの詳細設定@Table:テーブル名の指定(省略可)
これらを理解することで、より柔軟なエンティティ設計が可能になります。
9. よくあるエラーと解決方法
初心者がJPAを使う際によく遭遇するのが以下のようなエラーです。
- アノテーションの付け忘れ:
@Entityや@Idがないとテーブルが作られません - データ型のミスマッチ:Javaの型とDBの型が一致していないと保存エラーになります
- コネクションエラー:
application.propertiesの設定ミス
これらはメッセージをよく読み、設定やコードを丁寧に確認すれば解決できます。