
実際の開発でかかせないのが、DB操作です。それは Java (Spring Boot) での開発でも同様です。今回はDB操作について、簡単にお伝えします。
Spring Data JPAを使ったDB操作
Spring Boot でのDB操作では、Spring Data JPA という仕組みが主流です。これは ORマッパー (Object-Relational Mapper) と呼ばれる技術のひとつになります。これは Java のオブジェクトとDBのテーブルをアノテーションで直結し、SQLを1行も書かずにデータの保存や検索を完結させる仕組みです。以下の3つがDB連携を支えています。
| エンティティ (Entity) |
DBの「テーブル」そのものを表現するJavaクラスです。 クラスの上に @Entity、主キーとなるフィールドの上に @Id というアノテーションを付与するだけで、Spring Bootが「あ、このクラスはDBのあのテーブルと連動しているんだな」と自動的に認識します |
| リポジトリ (Repository) |
データの検索や保存を行うための窓口です。開発者はインターフェースを定義するだけで、実装クラスを書く必要がありません。リポジトリの例は以下の通りです。 |
| H2 Database | 学習やローカル開発では H2 Database というJava製の軽量DBを使います。 ・PCへのインストール作業が一切不要 (pom.xml に一行書くだけ) ・アプリを起動すると、PCのメモリ上に自動でDBが立ち上がり、アプリを止めると綺麗に消える ・ブラウザからDBの中身を覗ける便利な管理画面 (H2 Console) が最初から内蔵されている。 |
// インターフェースを宣言するだけ。中身のコードはSpringが自動生成します!
public interface UserRepository extends JpaRepository<User, String> {
// これだけで、保存(save)、全件取得(findAll)、ID検索(findById)が最初から使えます。
}実務では H2 Database ではなく PostgreSQL や MySQL などを利用します。
処理の流れ
画面から受け取ったユーザーデータをDBに保存したい場合はこれだけで完結します。
// コントローラーでの利用イメージ
@Autowired
private UserRepository userRepository; // リポジトリをDI(注入)してもらう
@PostMapping("/register")
public String registerUser(User user) {
// 1行書くだけで、Springが裏側で「INSERT INTO ...」というSQLを自動生成して実行します
userRepository.save(user);
return "success";
}手動での接続管理 (close 処理) や、面倒な詰め替え作業、SQL文の記述すら必要ありません。すべてフレームワークが安全に肩代わりしてくれます。
実装手順
ここでは、簡易的な商品管理をテーマにDB連携の仕組みを組み立てていきます。手順は以下の通りです。
- pom.xml にライブラリ追加
- データベースの設定記述
- テーブルの元となるエンティティ作成
- DB操作用のリポジトリ作成
- 制御するためのコントローラー作成
また、以下リンクの Spring Boot 設定を実施済みの上での説明となります。詳細はリンクより別記事をご確認ください。
pom.xml にライブラリ追加
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>pom.xml の <dependencies> の中に上記2つの記述を追記して保存してください。
- Spring Data JPA
- H2 Database
プロジェクトを右クリックし、[Maven] -> [プロジェクトの更新…] を実行してライブラリを完全に同期させてください。
データベースの設定記述
Spring Bootに、H2 Databaseを使用することと、ブラウザからDBの中身を確認するための管理画面 (H2 Console) を有効にする設定を伝えます。
# H2データベースへの接続設定(メモリ上に「testdb」という名前のDBを作成)
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
# H2の管理画面(Console)を有効化し、パスを「/h2-console」にする設定
spring.h2.console.enabled=true
spring.h2.console.path=/h2-consolesrc/main/resources/application.properties を開き、上記内容を追記してください。
テーブルの元となるエンティティ作成
DBのテーブル構造を定義するJavaクラスを作成します。
package com.example.demo;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
@Entity // このクラスがDBのテーブルとマッピングされることを示します
public class Task {
@Id // このフィールドが主キー(プライマリキー)であることを示します
private String id;
private String title;
// JPAの仕様上、引数なしのデフォルトコンストラクタが必須となります
public Task() {}
// データ登録時に使用するコンストラクタ
public Task(String id, String title) {
this.id = id;
this.title = title;
}
// ゲッターメソッド
public String getId() { return id; }
public String getTitle() { return title; }
}com.example.demo パッケージの中に、新しく Task.java というクラスを作成し、以下のコードを記述してください。
DB操作用のリポジトリ作成
データの保存や検索を行うためのインターフェースを作成します。
package com.example.demo;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
// JpaRepository<扱うエンティティの型, 主キーの型> を継承します
public interface TaskRepository extends JpaRepository<Task, String> {
// 枠組みを定義するだけで、標準的なCRUD処理のメソッドが自動的に利用可能になります
}com.example.demo パッケージの中に、新しく TaskRepository.java というファイルをインターフェースとして作成し、上記コードを記述してください。
制御するためのコントローラー作成
実際にリポジトリを呼び出して、データの登録と取得を行うURLの窓口を作ります。
package com.example.demo;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TaskController {
@Autowired
private TaskRepository taskRepository; // 引数なしで自動的にインスタンスが注入されます
// タスクを登録するURL(例:/add?title=買い物)
@GetMapping("/add")
public String addTask(@RequestParam(name = "title") String title) {
var id = "T" + (System.currentTimeMillis() % 1000);
var task = new Task(id, title);
taskRepository.save(task); // DBへのINSERT文が自動的に実行されます
return "タスクを登録しました: " + title;
}
// 登録されたタスクを全件取得してJSONで返すURL
@GetMapping("/tasks")
public List<Task> getTasks() {
return taskRepository.findAll(); // DBからのSELECT文が自動的に実行されます
}
}com.example.demo パッケージの中に、新しく TaskController.java というクラスを作成し、上記コードを記述してください。
起動と動作確認

DemoApplication.java を [実行] -> [Java アプリケーション] で起動します。


ブラウザを開き、まずは以下のURLにアクセスしてください。

登録後、以下の全件取得URLにアクセスします。画面に、登録したデータが上記のようなJSON配列の形式で出力されれば、DBへの保存と取得の処理が正常に動作しています。
この流れで、手動でのSQL記述や接続管理を行うことなく、クラスの定義とインターフェースの継承のみでDB操作が完結する構造が確認できます。
コメント