Spring BootでH2データベースを使う方法5STEP!Eclipseで解説

本ページはプロモーションが含まれています

「データベースの設定手順が知りたい」

「H2データベースを組み込んだアプリを作成したい」

簡単なWebアプリを制作した人は、より高度なアプリ開発のためにデータベースを調べているのではないでしょうか?

データベースの中で最も導入がシンプルなH2データベースは、最初に学ぶのに適しています。

しかし、完全主導で設定が完了するわけではないため、難易度は高めです。

そこで、本記事ではJavaで開発経験のあるみずがめが、以下の内容を紹介します。

  • データベースを使うための前提知識
  • H2データベースの設定方法5STEP

この記事を最後まで読むことで、自分の力でデータベースの設定が可能になります。

記事後半では、貼り付けて実行できるサンプルコードを掲載しているため、ぜひご活用ください。

Spring BootでH2データベースを実装する場合、データベースというシステムの性質を知っておく必要があります。

具体的には以下の順番でデータベースの理解を深めましょう。

  1. データベースとは
  2. H2データベースの特徴

データベースは奥が深いため、参考書の最初から順番に勉強するようなやり方だと時間がかかります。

実装に関係する知識だけを押さえて、実装に取り掛かるのがおすすめの勉強法です。

1.データベースとは

データベースとは情報を見やすくまとめたものです。

最もよく使う表形式のデータベースでは、項目を1番上に設定し、関係する通知や情報を書き込んでいきます。

下記は従業員名と契約件数を基に作成した表です。

従業員ID従業員契約件数
1新井7
2伊藤6
3藤田8
4佐々木12
5小田5

データベースを構築すると、複数の情報を整理して記録できるため、飲食店の注文システムや公的機関の個人情報管理などで活用されています。

とくに、Webアプリはインターネット上でユーザーのログイン情報やパスワードを扱うため、情報を整理した状態で保存できるデータベースの習得は必須です。

2.H2データベースの特徴

H2データベースは、Webアプリ初心者が最初に触れるデータベース管理システムとして適しています。

理由は以下のとおりです。

  • Spring Bootに入っている
  • 使うための準備が簡単
  • データベース管理が簡単

データベースを利用するには、公式サイトからデータベース管理システム(MySQLやOlacleなどが有名)をダウンロードする必要があります。

その後、データベース管理システムと開発環境(’コードを書くソフトウェア)を接続して使用します。

開発者が構築したデータベースは、MySQLやOlacle内に作られるため、中身を編集するにはデータベース管理システムを開発環境とは別に起動する必要があり難易度が高めです。

しかし、H2データベースはSpring Bootにデフォルトで組み込まれており、プロジェクト作成画面でチェックを入れるだけで利用できます。

また、アプリ稼働後のデータ管理がしやすく、制作したアプリ起動中にブラウザでコンソール画面(データを管理する画面)にアクセスすれば、作成されたデータを直接操作できます。

データベースを制作するまでの手順が少なく、変更結果をすぐ確認できるため、H2データベースは学習向けのシステムです。

Spring BootでH2データベースを使う場合は以下にある3つのファイルを作成・編集する必要があります。

  1. エンティティ
  2. リポジトリ
  3. 設定ファイル

中でも設定ファイルはWebアプリ全体の設定にかかわっているため、書かれている内容が複雑です。かみ砕いて解説しているためぜひご活用ください。

1.エンティティ

エンティティはデータベースの設計図を担当するファイルで、MVC(Webアプリを構成するシステム)のM(モデル)に該当します。

みずがめ
みずがめ

表の一番上にある項目を決定するのがエンティティです!

Webアプリの場合は、以下の項目を設定します。

  • ID番号
  • ユーザー名
  • パスワード

ID番号は、システム構築時に登録した順で番号を割り振るものと、ランダムに番号が決まるものがあり、作るアプリの方向性によって異なります。

ユーザー名は、登録した人のニックネームや本名が入り、変更不能にすることが多いようです。

パスワードは、ユーザーが決めた文字列を保存しておき、ログインするときに使われます。

同じ文字列なら正常にログインされますが、違った場合はパスワード入力のやり直しを促すメッセージを表示させるアルゴリズム(命令)を書きます。

エンティティはMVCのM(モデル)に該当し、データベースの骨格を定義する設計図です。

2.リポジトリ

リポジトリは、データベースの操作を担当してくれるファイルです。

Javaで書かれたコントローラの命令を受けて、データベース専用の構文とリンクさせる場所です。

具体的には、コントローラの要求に従って、データベースにあるデータを「追加」「検索」「更新」「削除」して保存したあと、コントローラに結果を返します。

プロジェクト作成画面でJPAにチェックを入れている場合は、コントローラの命令とデータベース構文を自動で結びつけてくれます。

開発者は保存のコマンドを設定するだけでリポジトリの完成です。

リポジトリは直接データベースの中身を操作するファイルといえます。

みずがめ
みずがめ

ちなみに、リポジトリのように2つのコンポーネント(部品)をつなぐ役割を持つものをインターフェースと呼びます。

3.設定ファイル

設定ファイルとは、Webアプリを正常に稼働させるのに必要な設定をまとめたファイルです。

以下の内容を設定します。

  • データベースの接続先の指定
  • ローカルサーバーのポート番号
  • ログレベルの設定
  • ブラウザによるコンソール操作設定

データベースを使う場合、設定ファイルで接続先・ユーザー名・パスワードを決めてから接続します。

ローカルサーバー(自分のパソコンでWebアプリを起動するときに必要なシステム)を立ち上げるには、IPアドレスとポート番号の指定が必要です。

みずがめ
みずがめ

IPアドレスはシステムの住所、そのシステムの玄関をポート番号と呼びます!

ローカルサーバーを起動すると、IPアドレスは自動で割り振られます。

ポート番号はデフォルトで8080になっていますが、2つ以上のSpringアプリを同時に実行するとお互い干渉してしまうため、手動で別の番号に指定してください。

ログレベルとは、プログラムを実行した際にターミナルやコンソールと呼ばれる場所に表示されるプログラムの成功・実行中・失敗といったデータの粒度です。

初心者の場合はデフォルトの「INFO」のまま学習を進めたほうがいいでしょう。アプリ起動で重要な起動メッセージやエラーだけをシンプルな英語で教えてくれます。

ワンポイント

ログレベルには致命的な失敗のみ表示の「ERROR」や改良に役立つ情報が得られる「DEBUG」などがあります。開発現場では改良のために正確な状況を把握するため、一時的にログレベルを変更し、リリース前に戻すのが一般的です。

コンソールの操作設定をオンにしておくと、ブラウザ上でデータベースの中身を確認できます。

アプリを停止させずにコンソール画面からコマンドによるデータの追加や削除が可能になるため、データベースを体験するのに最適です。

Spring BootでH2データベースを稼働させると、複数のファイルが連動して動作します。

また、HTMLやJavaのほかデータベース構文(データベースで使われる言語)といった複数の言語を行き来するため、難しいと感じるかもしれません。

以下で、情報の流れがわかりやすい飲食店の注文タブレットを例に、情報の流れを紹介します。

命令処理の順番アプリの動作使われているプログラミング言語
1アプリ起動Javaによりデータベース構築
2ユーザーがブラウザ(ビュー)から注文フォームを送信するHTMLの情報
3コントローラがリクエストを受け取るHTML(ビュー)→Java(コントローラ)
4コントローラがリポジトリに「データを保存して」と依頼するJava(コントローラ)→データベース構文
5リポジトリがデータベースにアクセスして実際の保存や検索を行うデータベース構文
6結果がコントローラーに戻るデータベース構文→Java(コントローラ)
7コントローラの命令ビューに表示されるJava(コントローラ)→HTML(ビュー)

データベースを直接操作・管理しているのはインターフェースのリポジトリで、コントローラが間接的に関係しています。

それぞれの役割を正確に把握できれば、ファイル構造で躓くことがなくなるはずです。

Spring BootでH2データベースを追加する方法は、ほかのデータベース管理システムの設定より簡単です。

以下の5STEPでWebアプリにH2データベースを追加します。

  1. 状態確認
  2. エンティティ作成
  3. リポジトリ作成
  4. 動作確認
  5. 実行

初心者にとってハードルが高いと感じるのが状態確認です。

複雑なコードが書かれているファイルを開くため「間違ってどこか変えちゃったらどうしよう…」と心配になる人もいます。

実は、プロジェクト作成画面でH2にチェックを入れていれば、コードを追加する必要はありません。コードが正常に追加されているか確認するだけで十分なため、恐れずファイルを開いてください。

なお、みずがめが執筆した「【初心者向け】Spring BootをEclipseで使う手順を4STEPで解説!」では、H2データベースの最もシンプルな設定方法を紹介しています。

1.状態確認

Spring BootにH2データベースに関する情報があるか確認します。

Eclipseを立ち上げてください。

上画像はEclipseを立ち上げた直後の画面です。最後に操作したファイルの中身が表示されているはずです。前回の続き画面からスタートします。

H2データベースを接続するプロジェクトを展開します。みずがめはSpring Bootで作った『CafeOrder[boot][devtools]』を選択します。

クリックすると中にあるファイルが表示されます。

「pom.xml」というファイルをダブルクリックしてください。

上画面は「pom.xml」の中身で、プロジェクトの作成と実行に必要なシステムの情報が記述されています。

H2データベースに関係するコードが書かれているか、確認していきましょう。

データベースの操作を自動化するJPAを有効にする記述があるか確認します。

以下のコードを見つけましょう。ファイルの中間あたりに書かれています。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

H2データベースの記述を確認します。

以下のコードを探してください。ファイルの後半にあるはずです。

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

これら2つの記述があれば、次のステップに進みます。

ない場合は、<dependencies>と</dependencies>の間に追加してください。

2.エンティティ作成

データベースの設計図であるエンティティを作成します。

パッケージを作成して関連ファイルをまとめておくと、アプリを拡張してもわかりやすい状態が保たれます。

以下の手順で作りましょう。

  1. モデルパッケージの作成
  2. エンティティの作成

まずはパッケージを作成します。

「src/main/java」を展開してください。

「com.example.cafeorder」を開いてください。

コントローラファイルまたは「controller」というパッケージと「CafeOrderApplication.java」が確認できます。エンティティパッケージは「controller」パッケージと同じところに作ります。

「com.example.cafeorder」の上にマウスカーソルを置いて、右クリックしてください。

「新規(W)」をクリックしてから、右側に表示された「パッケージ」を選びます。

名前(M)の「com.example.cafeorder」を変更します。

みずがめは「com.example.cafeorder.model」にしました。エンティティはMVCのM(モデル)に該当するため、名前の最後に「model」が入っています。

空のパッケージが作られます。中身が入っていないため、白色になっています。

「model」の上にマウスカーソルを合わせて右クリックしてください。

「新規(W)」にマウスカーソルを合わせると、右側に「クラス」が表示されるためクリックしてください。

クラスファイルの設定画面が表示されます。名前(M)を変更しましょう。

今回は「Order.java」と付けました。「完了(F)」をクリックしてください。

「model」パッケージに色が付き、中に「Order.java」が作られます。クリックして開いてください。

ファイルの中が確認できます。ファイルの中身を変えていきましょう。

以下のコードを貼り付けてください。

package com.example.cafeorder.model;

import java.time.LocalDateTime;

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

@Entity
@Table(name = "orders") // ← ここでテーブル名を orders に変更(予約語回避)
public class Order {
	
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String item;
    private int quantity;

    private LocalDateTime createdAt = LocalDateTime.now();

    // コンストラクタ(デフォルト)
    public Order() {}

    // 便利なコンストラクタ
    public Order(String item, int quantity) {
        this.item = item;
        this.quantity = quantity;
    }

    // getter / setter
    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }

    public String getItem() { return item; }
    public void setItem(String item) { this.item = item; }

    public int getQuantity() { return quantity; }
    public void setQuantity(int quantity) { this.quantity = quantity; }

    public LocalDateTime getCreatedAt() { return createdAt; }
    public void setCreatedAt(LocalDateTime createdAt) { this.createdAt = createdAt; }
}

上記コード12行目の@Tableを忘れると、Spring Bootが別のデータベースを使おうとしてエラーになります。

H2データベースを使う場合は、9行目にある「import jakarta.persistence.Table;」とセットで書いてください。

上記は「Order.java」にコードを貼り付けた状態です。コードの下に注意を促す赤線マーカーの表示がなければ成功です。

3.リポジトリ作成

リポジトリを作って、アプリ実行中にデータベースを操作できるようにします。

以下の手順で作成してください。

  1. リポジトリパッケージの作成
  2. リポジトリ作成

リポジトリパッケージは「model」や「controller」と同じ場所に作ります。

「com.example.cafeorder」の上にマウスカーソルを合わせて右クリックしてください。

「新規(W)」にマウスカーソルを合わせてください。右側に表示された「パッケージ」をクリックします。

パッケージ作成画面が表示されます。

「名前(M)」の部分に「com.example.cafeorder.repository」と入力して「完了(F)」を押しましょう。

空の「repository」パッケージが作られます。確認できたら「repository」パッケージの上で右クリックしてください。

「新規(W)」を選択します。

リポジトリはコントローラとデータベースの間で機能するファイルのため「インターフェース」をクリックしてください。

インターフェース作成画面が表示されます。

「名前(M)」部分に「OrderRepository」と変えて「完了(F)」を押します。

「repository」パッケージに「OrderRepository.java」が作られたら成功です。クリックして展開します。

インターフェースの中身は最低限のことが書かれています。

以下のコードを貼り付けてください。

package com.example.cafeorder.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import com.example.cafeorder.model.Order;

@Repository
public interface OrderRepository extends JpaRepository<Order, Long> {
}

アプリ起動中にデータベースを変更できるようになりました。

上画像は変更後の状態です。エラーが出ていなければ次に進みます。

4.設定の調節

エンティティとリポジトリを追加した後は、関連するファイルを変更していきます。

以下のファイルに手を加えてください。

  1. コントローラ修正
  2. 設定ファイルの追加

まずコントローラーを変更していきます。

「CafeOrderController.java」を展開してください。前回までの内容になっているはずです。

以下のコードを貼り付けて編集しましょう。

package com.example.cafeorder.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.example.cafeorder.model.Order;
import com.example.cafeorder.repository.OrderRepository;

@Controller
public class CafeOrderController {

    private final OrderRepository orderRepository;

    public CafeOrderController(OrderRepository orderRepository) {
        this.orderRepository = orderRepository;
    }

    // 注文フォームを表示
    @GetMapping("/order")
    public String showOrderForm(Model model) {
        model.addAttribute("message", "カフェ注文フォームへようこそ!");
        return "order";
    }

    // フォームから送信された注文を保存
    @PostMapping("/order")
    public String submitOrder(@RequestParam("item") String item, Model model) {
        Order order = new Order();
        order.setItem(item);
        orderRepository.save(order);

        model.addAttribute("message", "ご注文ありがとうございます! 選んだ商品: " + item);
        return "order";
    }
}

エンティティとリポジトリの関係を組み込んだコードです。

上画像のように、赤線マーカーの表示がなければ成功です。次に、設定ファイルを追加します。

「src/main/resources」をクリックして展開してください。中にある「application.properties」を選択します。

タブが間違っていないか確認します。タブに黄緑色の木の葉アイコンが表示されていれば正しいファイルです。

以下のコードを貼り付けてください。

spring.application.name=CafeOrder

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true

H2データベースを有効にするためのコードです。

上のサンプルコードでは、ユーザー名とパスワードも一緒に設定しています。

上画像のように、貼り付けた後に赤線マーカーが出ていなければ次に進んでください。

5.実行

実際に起動してデータベースを操作します。

「▷」を押してアプリを起動してください。

Eclipseはそのままにして、Google Chromeを起動します。

「http://localhost:8080/h2-console」と入力してください。「/h2-console」の部分は、データベースを管理するシステムの場所を示します。

上記の画像はH2データベースのコンソール画面です。

言語を変えておきます。左上の「English」をクリックし、下に表示される「日本語」を選びましょう。

「jdbc:h2:~/test」の部分を設定ファイルで指定した「jdbc:h2:mem:testdb」に書き換えてください。

設定ファイルで決めたユーザーネームとパスワードを入力し「接続」をクリックします。

本記事通りに進めているなら、ユーザーネームは「sa」パスワードは空欄の状態で接続できるはずです。

コンソール画面が表示されました。

コンソール画面を閉じずに新しいタブを開いてください。

「http://localhost:8080/order」と入力してください。

注文フォームが表示されます。好きなものを選んでください。

「注文する」で注文データを送信しましょう。

タブを「H2コンソール」に切り替えます。

データベース構文で生成されたデータベースを確認します。

以下のコードを上画像の「①コマンド入力」に貼り付けてください。

SHOW TABLES;

コードを貼り付けたら、上にある「▷」を押して実行します。表が表示されたら成功です。

データベースは設定やファイルの場所のほか、情報の流れを意識すると理解が深まります。実行STEPを繰り返し、どんな処理をしているのかイメージしてみてください。

H2データベースで情報の流れについて理解が深まったら本格的なデータベース管理システムを使ってWebアプリを製作してみてください。

コメント

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