前書き
この記事はこちらの記事の続き。
せっかくなのでデータベースを利用できるようにする。
データベースの準備
Dockerデスクトップのインストール
Docker Desktop for Windowsを押してインストーラーをダウンロードしてインストール。
MySQLのDocker imageを取得する
docker pull mysql
Docker Imageの起動
docker run --name testdb -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=testdb -P --expose=3306 -p 3306:3306 -d mysql:latest
- データベースの名前は
testdb
- データベースのrootユーザーのパスワードは
root
- データベース接続の際のPortは
3306
- 利用するMySQLDBのイメージは最新のもの
DBeaverのインストール
作成したデータベースに接続するため、DBeaverを準備する。
Windows(installer)をクリックしてダウンロードし、インストールする。
DBeaverの設定
データベースナビゲーターの中で右クリック、作成、接続を押す。
MYSQLを選択し、次へボタンを押す。
Server Host : localhost
Port : 3306
Database : testdb
ユーザー名 : root
パスワード : root
テスト接続ボタンを押して、接続されることを確認する。
接続されたらOKボタンを押す。1
接続したtestdbのプルダウンをクリックして、データベース、testdbを開き右クリックする。
SQLエディタ、SQLエディタを選択する。
New scriptをクリックし、SQLエディタを表示する。
ここにSQLを入力して SQL文を実行する
を押すことでSQLが実行できます。
データベースにテーブルを作成する
CREATE TABLE TEST(
MESSAGE VARCHAR(255)
)
作成したテーブルにデータを投入する
INSERT INTO TEST VALUES ("テストメッセージ!!!");
投入したデータの確認
SELECT * FROM TEST
実行すると新しいウインドウが開き、実行結果が表示されます。
アプリからデータベースに接続して動かす
build.graldeの dependencies
にMySQLのドライバとSpringJDBCを追記。
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
runtimeOnly 'com.mysql:mysql-connector-j'
implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
}
追記するとGradleが必要なライブラリを取得してくれます。
application.propertiesにデータベースへの接続情報を追記。2
spring.application.name=demo
spring.datasource.url=jdbc:mysql://localhost:3306/testdb
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
前回動かしてみたControllerとhtmlを改造し、データベースから取得したメッセージを画面に表示する。
DemoController
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class DemoController {
@Autowired
private JdbcTemplate jdbcTemplate;
@GetMapping("test")
public String getMethodName(Model model) {
String sql = "SELECT MESSAGE FROM TEST";
String message = jdbcTemplate.queryForObject(sql, String.class);
model.addAttribute("message", message);
return "test";
}
}
test.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<p style="color:red;" th:text="${message}"></p>
http://localhost:8080/test にアクセス。
DBの値を変更すると表示されるメッセージも変化する。
おわり。
追記:
この記事で準備した開発環境のクラスを分割し、SpringのDIの仕組みを使ってインジェクションする記事を書きました。
更にSpringSecurityを使ってログインの仕組みを実装する記事を書きました。
ご興味あればこちらもご覧ください。