1. HOME
  2. ブログ
  3. IT技術
  4. 【第2回】Spring bootで運動記録をDBに記録してみた(DB作成編)
【第2回】Spring bootで運動記録をDBに記録してみた(DB作成編)

【第2回】Spring bootで運動記録をDBに記録してみた(DB作成編)

【第2回】Springbootを使って、DBとの連携システムを考える

前回は簡単な画面表示をするところまで説明しました。

今回はDB(データベース)の設定をしていきたいと思います。

DBにもいろいろと種類はありますが、

まずは手間が少ない 「h2 database」 を利用してみたいと思います。

前回の記事はこちら

【第1回】Spring bootで運動記録をDBに記録してみた(準備編)

h2 databaseでDBを作成する

pom.xmlの設定

前回の記事で、DBを利用するためにプロジェクト作成時に

「JDBC API」 と 「h2 database」 をライブラリ指定したかと思います。

指定してあればpom.xmlに以下の記述がされているはずです。

もし無ければ追記してください。

application.ymlの設定

次にapplication.ymlにDB設定をしていきます。

「spring.datasource」 に一通りの設定を記述しています。

「driver-class-name」 でドライバのクラス名を指定してます。

urlにはDBの種類、DB名とオプションを記載してあります。

今回は 「jdbc:h2:mem:testdb;」 でh2にtestdbという名前のDBを

mem指定でインメモリデータベースとして準備しています。

インメモリデータベースはSpringboot起動中に使えるメモリ上のデータベースです。

この設定だと、Springbootを停止するとメモリは破棄されます。

インメモリの場合、通常h2は接続が切れるとデータベースをドロップします。

それを防ぐために「DB_CLOSE_DELAY=-1;」追記します。

また、「DB_CLOSE_ON_EXIT=false」

VM終了時の自動データベースクローズを無効にしています。

あとは接続するためのusernameとpasswordを設定します。

「initialization-mode: always」については後で説明します。

h2コンソールの設定

h2コンソールを利用することによって、DBの確認がしやすくなります。

application.ymlに以下を追記します。

「spring.h2.console」に一通りの設定を記述しています。

「enabled」は、コンソールの利用有無を設定しています。

trueなら利用、falseなら利用しない、となります。

「path」は、H2コンソールを表示するURLパスとなります。

上記のように「path: /h2-console」と設定した場合、

ローカル起動して「http://localhost:8080/h2-console」にアクセスすると

h2コンソールが表示されます。

h2コンソールの設定

この画面にapplication.ymlで設定した情報を入力して

「Connect」を押すとDBの状態が見れます。

今はまだDBの定義もしていないので、この画面が見えるだけで良いです。

DBのテーブルを準備する

次にDBのテーブルを準備します。

いくつか方法がありますので、順番に紹介していきます。

JPAによるテーブルの設定

application.ymlに「spring.jpa.」からの設定を追記します。

これによってSQLのお手伝いをしてくれる設定を取り込みます。

「show-sql」をtrueにすると、生成されたSQLがコンソール等で表示されるようになります。

「hibernate.ddl-auto」を「cleate」に設定しておくと

「@entity」で定義されたクラスを読み取って、

自動的にクラス名のテーブルで、変数をカラムとして作成してくれるようになります。

例えばクラス名がProgramで、その中に変数名id、nameがあるとします。

このクラスに@Entity アノテーションを付けて起動すると、

カラムidとnameが存在するprogramテーブルが自動的に作られます。

この時 show-sql を設定していると、起動時に以下のようなログが表示されるので、動きがわかりやすいです。

schema.sqlによるテーブルの設定

次に「schema.sql」を利用したテーブル設定の紹介です。

先に記述していた 「initialization-mode: always」をapplication.ymlに設定すると、

起動時に決められた配置にあるSQLファイルを読み込んでくれるようになります。

(前述の記載例を参照)

読み込むために schema.sql という名前のファイルを

resourcesディレクトリ直下に配置し、

その中にCREATE文など必要なものを記載していきます。

設定の仕方によっては起動のたびに呼ばれるので重複エラーが起きないように

「CREATE TABLE IF NOT EXISTS 〜」としておくと良いです。

(記載されているテーブル名が存在しなければテーブルを作る、という意味です)

また「data.sql」という名前のファイルを上記と同じところに配置し、

中身にINSERT文を記載しておくことによって

起動時にデータを入れてくれるようになります。

上記テーブル設定についての注意点

では「ddl-auto」を有効にしつつ、「schema.sql」を設定した場合はどうなるでしょうか?

この場合で起動すると、「schema.sql」「data.sql」が実行されてテーブルとデータが出来るも、

そのあとに「ddl-auto」の機能で一度テーブルを消してから

@Entityの情報を読み取ってテーブルを作る、

といった動きになり、「schema.sql」「data.sql」は意味が無くなります。

ですので、用途に合わせてどのようにテーブルの準備するかは検討しておくと良いでしょう。

今回は schema.sql での実装

今回はSQLの勉強も兼ねて、「schema.sql」でテーブル準備をしたいと思います。

SQLの中身は上記の例で記載したとおり、「program」「achievement」の2テーブルを作成し、

「data.sql」に記載したデータを初期値として起動時に登録する形で進めます。

そのために今の「ddl-auto」の設定を「cleate」から「none」に書き換えて無効にします。

「ddl-auto」が有効の時の勉強も別途する予定なので、記述自体はひとまず残しておく方向です。

起動してh2コンソールでテーブルを確認する

では、上記の「schema.sql」「data.sql」を準備した状態で起動してみます。

起動後、h2コンソールを開きます。、データが入っていればOKです。

起動してh2コンソールでテーブルを確認する

先に書いた通り、application.ymlに記載した情報を入力して、Connectボタンを押します。

画面が切り替わり左側のサイドメニューにtestdbのデータベース名があり、

「schema.sql」で記載したテーブル名があればOKです。

「data.sql」もあればそこで記載したレコードが反映されているか、

真ん中のテキストエリアにSQL文を書き込んで、「Run」ボタンを押して実行してみてください。

ひとまず、「SELECT *  FROM PROGRAM」で、PROGRAMテーブルの中身を見てみます。

SQLの結果、正常にデータが表示されていればOKです。

PROGRAMテーブルの中身

さて、これで最低限のDBの準備が出来ました。

次からはこのDBを利用して、画面に表示したりデータの変更をしたりしていきたいと思います。

書いた人はこんな人

あっきー(エンジニア)
元ファストフード店長代理のJava系ITエンジニア。
Webサイト系の開発や運用をいくらか経験し、
現在はAndroidアプリ開発を主に担当したり。
休みの日はゲームとか風景写真撮りに行ったりとかマラソンしたりとか。

関連記事

採用情報

\ あの有名サービスに参画!? /

バックエンドエンジニア

\ クリエイティブの最前線 /

フロントエンドエンジニア

\ 世界を変える…! /

Androidエンジニア

\ みんなが使うアプリを創る /

iOSエンジニア