SpringBootでグループウェアの開発②〜DB接続〜

# DB接続
[前回](https://qiita.com/r_saiki/items/ba053e37b0f1deaf9072)は環境構築をして、HelloWorldを表示するところまで実施しました。今回はDB接続をして、新規登録機能を完成させることを目標に取り組もうと思います。
## DB関連の設定
### MySQL8.0を起動
前回作成したMySQLのコンテナを起動する。

~~~
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                               NAMES
be628a63358d        mysql:8.0           "docker-entrypoint.s…"   22 hours ago        Exited (0) 16 seconds ago                                       mygroupware_db_1
$ docker start be628a63358d
be628a63358d
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
be628a63358d        mysql:8.0           "docker-entrypoint.s…"   22 hours ago        Up 9 seconds        33060/tcp, 0.0.0.0:3304->3306/tcp   mygroupware_db_1

~~~

### ユーザーテーブル作成
SQLクライアントツールでMySQLに接続して、以下のデータベースとテーブルを作成。自分は[workbench](https://www.mysql.com/jp/products/workbench/)を使ってる。

~~~sql
--データベース作成
CREATE DATABASE mygroupwere;
--testユーザにmygroupwere内での権限付与。次回からはテストユーザで作業する。
GRANT ALL ON mygroupwere.* TO test;
--ユーザーテーブルを作成する。idとupdated_atは自動で設定。
USE mygroupwere;
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name TEXT NOT NULL,
password TEXT NOT NULL,
role TEXT NOT NULL,
updated_at datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)DEFAULT CHARACTER SET=utf8;
~~~

### application.propertiesの編集

~~~:application.properties
spring.datasource.url=jdbc:mysql://localhost:3304/mygroupwere
spring.datasource.username=test
spring.datasource.password=test
spring.datasource.driverClassName=com.mysql.jdbc.Driver
~~~

### build.gradleを編集
[mvnrepository](https://mvnrepository.com/)から、mysqlを検索して、以下のように依存関係を追加。

~~~groovy:build.gradle
plugins {
	id 'org.springframework.boot' version '2.2.3.RELEASE'
	id 'io.spring.dependency-management' version '1.0.8.RELEASE'
	id 'java'
}

group = 'rsrepo.groupware'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

configurations {
	developmentOnly
	runtimeClasspath {
		extendsFrom developmentOnly
	}
	compileOnly {
		extendsFrom annotationProcessor
	}
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	compileOnly 'org.projectlombok:lombok'
	developmentOnly 'org.springframework.boot:spring-boot-devtools'
	annotationProcessor 'org.projectlombok:lombok'
	implementation 'mysql:mysql-connector-java'    // 追加
	testImplementation('org.springframework.boot:spring-boot-starter-test') {
		exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
	}
}

test {
	useJUnitPlatform()
}

~~~

## ユーザーモデルを作成

~~~java:User.java
package パッケージ名.プロジェクト名.domain.model.entity;

import java.util.Date;

import lombok.Data;

@Data
public class User {
    private String id; // ID
    private String name; // ユーザー名
    private String password; // パスワード
    private String role; // ロール
    private Date updated_at; // 更新日時
}
~~~

いい時間になってしまったので、今日はここまでで終了！
次回はDB接続の続きから始めます。
[SpringBootでグループウェアの開発①〜環境構築〜](https://qiita.com/r_saiki/items/ba053e37b0f1deaf9072)
[SpringBootでグループウェアの開発③〜DB接続の続き〜](https://qiita.com/r_saiki/items/fa5e9d7a10013ec996fa)
[GitHub:MyGroupware](https://github.com/RSrepository/MyGroupware)