SpringBootやってみる~DBアクセス(mybatis)編~ データ取得①

#目的
自己学習向け・初心者向けメモ。
今回はmybatisでDBアクセスをしてデータを取得するサンプルプログラムを作成する。

#概要
- [MySQLのインストール](#MySQLのインストール) 
- [データベースの作成](#データベースの作成) 
- [アプリケーションの実装](#アプリケーションの実装) 

#MySQLのインストール
MySQLをインストールします。

※インストール方法については下記リンク参照
[DBOnline](https://www.dbonline.jp/mysql/install/ "DBOnline")

#データベースの作成
アプリケーションで作成するデータベースを作成する
[A5:SQL MK-2](https://a5m2.mmatsubara.com/)を使用します。

※データベースの接続方法については割愛しますが下記リンクを参照
[データベースへの接続方法](https://a5m2.mmatsubara.com/tips/mysql_connect/ "データベースへの接続方法")

##テーブルの作成
ただ表示するだけなのでシンプルなテーブルを作成します。

【userinfo(ユーザー情報)】

| 論理名 | 論理名 | 型     | 文字数 | 制約                |
|:------|:------|:-------|:------|:--------------------|
| id    | ID    | integer   |      |NOT NULL, PRIMARY KEY|
| name  | 名前  | varchar| 255   |                     |
| sex   | 性別  | varchar| 1     |                     |


```
create table userinfo (id integer NOT NULL PRIMARY KEY,
                       name varchar(255),
                       sex char(1)); 
```

次はデータを作成します。

```
INSERT INTO userinfo VALUES (1,'来栖翔','男');
INSERT INTO userinfo VALUES (2,'小野寺梓','女'); 
```

作成できたようなので確認...

```
SELECT * FROM userinfo;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530028/e8b07c0e-2546-2511-79e6-81358bf6c6e4.png)


確認できた　(๑˃̵ᴗ˂̵)و ﾖｼ!（名前は気にしないでね）

#アプリケーションの実装
アプリケーションの作成をします。
次にライブラリを選定します。選択したのは以下のとおりです。

|項番|ライブラリ|
|:---|:---|
|1|Spring Boot DevTools|
|2|Lombok|
|3|Spring Configuration Processor|
|4|MyBatis Framework|
|5|MySQL Driver|
|6|Thymeleaf|
|7|Spring Web|


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530028/21e87118-5f58-3891-cc04-7d406176abe9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530028/6518121c-99d3-889e-285a-ff57603b7669.png)


パッケージ・エクスプローラーにプロジェクトが表示された╭( ・ㅂ・)و ̑̑ ｸﾞｯ !
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530028/b0a30e84-6505-c2ee-8a6a-ba052a9e1e92.png)

##フォルダ構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530028/16d538e9-0481-ea77-0b25-ecf310805f97.png)

##application.propertiesの作成

```properties:application.properties
#MySQLのドライバ設定
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#接続用URL
spring.datasource.url=jdbc:mysql://localhost/userinfo?serverTimezone=JST
#ユーザ名
spring.datasource.username=user1
#パスワード
spring.datasource.password=p@ssword
```

##クラスとインターフェースの作成
entity、mapper、controllerを作成します。
・entity：変数とその setter、getter だけを持つクラス
         MyBatis が、このクラスのにテーブルのデータを格納してくれる
・mapper：インターフェースですが、具象クラスは MyBatis が XML の SQL 情報等を使用し、自動で作成してくれ
・controller：MyBatis が自動で生成したマッパーの具象クラスを Spring が DI してくれる

```java:UserInfo.java
package org.app.dbapp.entity;

public class UserInfo {

	private String id;
	private String name;
	private String sex;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}
}
```


```java:UserInfoMapper.java
package org.app.dbapp.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.app.dbapp.entity.UserInfo;

@Mapper
public interface UserInfoMapper {
	List<UserInfo> selectAll();
}
```

```java:DemoController.java
package org.app.dbapp.controller;

import java.util.List;

import org.app.dbapp.entity.UserInfo;
import org.app.dbapp.mapper.UserInfoMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class IndexController {

	@Autowired
	UserInfoMapper userInfoMapper;

	@RequestMapping
	public String index(Model model) {
		List<UserInfo> list = userInfoMapper.selectAll();
		model.addAttribute("userInfo", list);
		return "index";
	}
}
```

## XMLファイルの作成
resource 配下に作成したフォルダに SQL を記載した XML ファイルを作成します。

```xml:UserInfoMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.app.dbapp.mapper.UserInfoMapper">
    <select id="selectAll" resultType="org.app.dbapp.entity.UserInfo">
        SELECT * FROM userinfo;
    </select>
</mapper>
```

##Tymeleaf の作成

あとは、resources/templates 配下に Tymeleaf の配置します。

```html:index.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<table border="1">
		<tr>
			<th>ＩＤ</th>
			<th>名前</th>
			<th>性別</th>
		</tr>
		<tr th:each="info: ${userInfo}">
			<td th:text="${info.id}"></td>
			<td th:text="${info.name}"></td>
			<td th:text="${info.sex}"></td>
		</tr>
	</table>
</body>
</html>
```
##実行
Spring Boot App で起動して http://localhost:8080 にアクセスするとこのような画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530028/71b0986e-1cc4-a6a1-cb6e-823599b9d3db.png)

#次回
[SpringBootやってみる~DBアクセス(mybatis)編~ データ取得②](https://qiita.com/y_ogawa_naaaa/items/8d8f88091da318d5f356 "SpringBootやってみる~DBアクセス(mybatis)編~ データ取得②")