H2 Database Engineを使って爆速でシステム開発する

システム開発初期段階でデータベースの構成が揺れている段階では、プログラムに必要な構成でデータベースを構成して開発を進めてしまった方が時間短縮になります。そのとき、データベースの構成を柔軟に変えていきたい。

H2 Database Engineだったら、データベースの構成を柔軟に変更していくことが出来ます。今回の記事ではH2 Database Engineで爆速でシステム開発する方法をご紹介します。

H2の概要

H2はいくつかのモードがあります。メモリにデータを持つインメモリDBモードで使用することも出来ますし、DBサーバーとして使用することも出来ます。ファイルとしてデータを持つことも出来ます。

  • インメモリDBモード ← おすすめ!
  • DBサーバーモード
  • ファイルモード

私はこの中で最も手軽なインメモリDBモードで使用することが多いです。インメモリDBモードでH2を起動すると、H2 Console画面からデータを見ることが出来ます。インメモリDBモードで使用するときの注意ポイントとしてはeclipseのDBViewerやA5などのツールではデータを見ることは出来ないことです。

今回のサンプルではインメモリDBモードでH2を起動してH2 Console画面でデータを確認します。

サンプルを作成する

ボタンをクリックするとデータを1行追加するサンプルを作成します。完成形の画面は次のようになります。

データが増えている様子は先ほどH2 Console画面で確認します。

H2の設定

Spring Bootを使用すればライブラリを読み込むだけでデータベースを使用することが出来ます。インストール不要なのでかなり便利です。

Datasouseの設定はSpring Bootのapprication.propertiesに記載します。

# H2
spring.database.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.url=jdbc:h2:mem:testdb
spring.h2.console.enabled=true

# JPA
spring.jpa.hibernate.ddl-auto=create
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

# JVM recognize Project-Name
spring.jmx.default-domain: sampleh2

# context-path setting ( only SpringBoot enviroment)
server.servlet.context-path = /sampleh2

#http://localhost:8080/sampleh2/h2-console
#http://localhost:8080/sampleh2

設定はこれだけです。

プログラム

SampleEntity.java

package com.demo.app.controller;

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

import lombok.Data;

@Entity
@Data
public class SampleEntity {
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private Integer id;
  private String name;
  private Integer old;

  public SampleEntity() {
  }

  public SampleEntity(String name, Integer old) {
    this.name = name;
    this.old = old;
  }
}

これがテーブルとマッピングするモデルです。

SampleRepository.java

package com.demo.app.controller;

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

@Repository
public interface SampleRepository extends JpaRepository<SampleEntity, Integer>{
}

モデルを管理するリポジトリーです。

SampleService.java

package com.demo.app.controller;

import javax.annotation.PostConstruct;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class SampleService {

  @Autowired
  SampleRepository sampleRepository;

  // create
  SampleEntity createEntity(SampleEntity entity) {
    return sampleRepository.saveAndFlush(entity);
  }

  // init
  @PostConstruct
  public void init() {
    sampleRepository.saveAndFlush(new SampleEntity("yamada,taro", 30));
  }
}

リポジトリーを扱う業務ロジックです。@PostContractでプロジェクト起動時のみ実行する処理を記載しています。ここでH2のテーブルを作成しています。H2は定義のない型のデータが登録依頼が来ると、その型のデータ定義のテーブルを作成します。

SampleController.java

package com.demo.app.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class SampleController {

  @Autowired
  SampleService sampleService;

  @GetMapping("/")
  private ModelAndView getSample(ModelAndView mav) {
    mav.setViewName("index");
    return mav;
  }

  @PostMapping("/")
  private ModelAndView postSample(ModelAndView mav) {
    sampleService.createEntity(new SampleEntity("yamada,taro", 30));
    mav.setViewName("index");
    return mav;
  }

}

ブラウザからのアクセスを受け付けて業務ロジックへ命令を出すコントローラーです。

index.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Smaple H2</title>
</head>
<body>
  <form action="./" method="post">
    <input type="submit" id="POST" value="POST">
  </form>
</body>
</html>

画面です。

最終的なフォルダ構成はこのようになります。

これでプログラムは完了です。非常に短いコードでデータベールの作成、データ追加までを実装することが出来ました。次に動作確認をしてみます。

動作確認

まずはサンプルプロジェクトを起動した状態でどのようなデータ構成になっているかH2のコンソール画面で確認します。

次のURLでH2のコンソール画面にブラウザからアクセスします。

http://localhost:8080/sampleh2/h2-console/

ログイン画面が表示されます。apprication.propertiesに設定した値を指定してConnectボタンをクリックします。

ログインに成功すると、次のような画面が表示されます。プログラム中で作成したテーブル「SAMPLE_ENTITY」が画面左側メニューに表示されているのでクリックするとSQLが画面真ん中に表示されるので、Run Selectedボタンをクリックしてデータを表示させます。

次にサンプルプロジェクトにアクセスします。次のURLでブラウザからアクセスします。

http://localhost:8080/sampleh2

次のような画面が表示されます。

POSTボタンを何回かクリックします。一回クリックするごとにデータが1行追加されます。

H2 Console画面でデータが追加されたか確認します。

データが追加されていることを確認できました。

今回のサンプルではテーブルへのINSERTのみでしたが、CRUD操作すべて問題なく実施することが出来ます。H2 Database Engineを使って爆速でシステム開発しましょう!

参考サイト:H2 Database Engine 公式サイト