はじめに
本記事で書くこと
- H2databaseの利用方法
- H2コンソールの表示方法
- jdbcTemplateを使用したSQL実行方法
本記事で書かないこと
- SprinBootでウェブアプリケーションを作成する方法
作成するアプリケーションの概要
- アプリケーション起動時にH2データベースに「TSET_TABLE」というテーブルをCREATEし、3レコードを追加する
- 画面は「入力画面」と「登録後確認画面」の2つ
- 「入力画面」では登録内容の入力と現在のDB内容の確認が可能
- 「登録後確認画面」では登録内容の表示と現在のDB内容の確認が可能
- H2データベースは、アプリケーション起動毎に初期化する。
パッケージ構成
C:.
├─java
│ ├─base
│ │ │ MainApplication.java
│ │ │
│ │ ├─config
│ │ │ SecurityConfig.java
│ │ │
│ │ ├─controller
│ │ │ T001Controller.java
│ │ │
│ │ ├─dto
│ │ │ T001Form.java
│ │ │
│ │ ├─entity
│ │ │ dept.java
│ │ │
│ │ └─service
│ │ T001Service.java
│ │
│ └─org
└─resources
│ application.yml
│ data.sql
│ schema.sql
│
└─templates
│ T001Confirm.html
│ T001Input.html
│
└─components
layout.html
画面設計(簡素版)
初期画面
登録後、確認画面
ソース
ソースはこちらに公開していますので、ご自由にお使い下さい。
https://github.com/morimoto-com/test202209
H2データベースとは
H2データベースとは、Javaで実装されたリレーショナル型データベースです。
インストールなどが不要で手軽に実装できることがメリットで、プロトタイプ開発やテスト用のDBとして良く用いられます。
データの保存先はインメモリかファイルベースで、データを保存する必要がない場合はインメモリ、保存したい場合はファイルベースという使い分けをします。
SpringBootの場合は、非常に簡単に扱うことができるので、今回はその利用方法を説明します。
H2データベースを準備する
今回はインメモリを使用してH2データベースを構築します。
build.gradleにライブラリ情報を定義する
まずは、H2データベースを利用するためにgradleにライブラリ情報を定義します。
implementation 'javax.persistence:javax.persistence-api:2.2'
//⇒entityクラスの@entityなどに使用
implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
//⇒h2データベースを操作するのに使用
runtimeOnly 'com.h2database:h2'
//⇒h2データベースそのもの
その他にもいくつか指定していますが、「H2データベースを利用する」という観点で重要なライブラリは上記3つです。
application.ymlに接続情報を定義する
# JDBCドライバを指定
spring:
datasource:
driver-class-name: org.h2.Driver
# データベースのURL。メモリ上にtestdbを作成しますよ、と指定。
url: jdbc:h2:mem:testdb
username: sa
password:
application.ymlにてコンソールを有効化する
h2:
console:
# コンソールを有効化
enabled: true
path: /h2-console
H2データベースのコンソールを開く
以上で、SpringBootアプリケーション上にH2データベースを使用する環境を構築することができました。
まだ、テーブルなどを作成していないのでデータを操作することはできませんが、
まずは、H2データベースそのものにアクセスしてみます。
12:48:49: 'bootRun' を実行中...
> Task :bootBuildInfo
> Task :compileJava UP-TO-DATE
> Task :processResources UP-TO-DATE
> Task :classes
> Task :bootRunMainClassName
> Task :bootRun
12:48:50.172 [Thread-0] DEBUG org.springframework.boot.devtools.restart.classloader.RestartClassLoader xxx
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.0)
xxx 省略 xxx
2022-10-01 12:48:51.954 INFO 13176 --- [ restartedMain] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb'
xxx 省略 xxx
2022-10-01 12:48:52.506 INFO 13176 --- [ restartedMain] base.MainApplication : Started MainApplication in 2.325 seconds (JVM running for 2.676)
起動ログにて、H2データベースが起動したことが確認できます。
では、下記URLにアクセスしてみます。
http://localhost:8080/h2-console
すると、H2 Consoleというページが表示されるので、前で設定した接続情報を入力して接続します。
H2データベースに接続できました。
※私の場合はすでにTEST_TABLEというテーブルが存在していますが、こちらは後の手順で作成したものです
SpringBoot起動時にDBを初期化する
やり方はとても簡単です。
resourcesの配下にSQLを配置します。
DDLはschema.sqlに、
DMLはdata.sqlに記述してください。
└─resources
│ data.sql
│ schema.sql
あとはSpringBootを再起動することで
設定したSQLが実行され、メモリ上にテーブルが作成されます。
SQLを実行する
では、H2データベースを使用する準備ができましたので
あとはデータベースを操作する実装をしていきます。
今回はリポジトリクラスは省略します。
JdbcTemplateを@Autowiredする
@Autowired
private JdbcTemplate jdbcTemplate;
jdbcTemplateを使用してSELECT文を実行する
public List<dept> selectDb(){
// DB一覧取得処理
return jdbcTemplate.query("SELECT * FROM TSET_TABLE", new BeanPropertyRowMapper<dept>(dept.class));
}
jdbcTemplateを使用してINSERT文を実行する
public void insertDb(T001Form form){
// DB挿入処理
jdbcTemplate.update("INSERT INTO TSET_TABLE (text1, text2) VALUES (?, ?)", form.getText1() , form.getText2());
}
以上