システム開発初期段階でデータベースの構成が揺れている段階では、プログラムに必要な構成でデータベースを構成して開発を進めてしまった方が時間短縮になります。そのとき、データベースの構成を柔軟に変えていきたい。
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
設定はこれだけです。
プログラム
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; } }
これがテーブルとマッピングするモデルです。
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>{ }
モデルを管理するリポジトリーです。
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は定義のない型のデータが登録依頼が来ると、その型のデータ定義のテーブルを作成します。
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; } }
ブラウザからのアクセスを受け付けて業務ロジックへ命令を出すコントローラーです。
<!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を使って爆速でシステム開発しましょう!
参考