9
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

前書き

この記事はこちらの記事の続き。
せっかくなのでデータベースを利用できるようにする。

データベースの準備

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の設定

データベースナビゲーターの中で右クリック、作成、接続を押す。

image.png

MYSQLを選択し、次へボタンを押す。
Server Host : localhost
Port : 3306
Database : testdb
ユーザー名 : root
パスワード : root

テスト接続ボタンを押して、接続されることを確認する。

image.png

接続されたらOKボタンを押す。1

接続したtestdbのプルダウンをクリックして、データベース、testdbを開き右クリックする。

image.png

SQLエディタ、SQLエディタを選択する。

image.png

New scriptをクリックし、SQLエディタを表示する。

image.png

ここにSQLを入力して SQL文を実行する を押すことでSQLが実行できます。

データベースにテーブルを作成する

CREATE TABLE TEST(
 MESSAGE VARCHAR(255)
)

image.png

作成したテーブルにデータを投入する

INSERT INTO TEST VALUES ("テストメッセージ!!!");

投入したデータの確認

SELECT * FROM TEST

実行すると新しいウインドウが開き、実行結果が表示されます。

image.png

アプリからデータベースに接続して動かす

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 にアクセス。

image.png

DBの値を変更すると表示されるメッセージも変化する。

image.png

image.png

おわり。

追記:

この記事で準備した開発環境のクラスを分割し、SpringのDIの仕組みを使ってインジェクションする記事を書きました。

更にSpringSecurityを使ってログインの仕組みを実装する記事を書きました。

ご興味あればこちらもご覧ください。

  1. Public Key Retrieval is not allowed エラーが発生する場合は ドライバのプロパティ から allowPublicKeyRetrievalTRUE にして再度試す。
    ただしTLSで保護されていない通信での接続を許可するものであるため、あくまでも開発用の設定変更。
    image.png

  2. あくまでも実験のためrootユーザーで接続。アプリケーションとしてリリースするのであれば適切な権限を設定したユーザーを作成し、そのユーザーで接続する。

9
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?