【実践‼】MyBatisを使用する際の最低限の設定

## 1.事前知識
- [【初心者でもできる‼】Windows10にEclipseをインストールする方法（Java環境構築）](https://qiita.com/ryome/items/b47c5acdaa52cffbec58)
- [【実践‼】Spring Boot で Hello World を表示する](https://qiita.com/ryome/items/8d7f71ebedeeb2526cee)
- [【実践‼】Javaデータベース連携（Connector/J 8.0.20）](https://qiita.com/ryome/items/c78534200ae725ad571b)

事前知識として、上記リンクの内容が必要です。

## 2.事前準備
![22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/73a0e22e-c500-a42a-f60f-82f6ddc13bb3.png)
![23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/351c92f9-efad-b067-c284-7f8cf28112bb.png)
1. 検索ボックスに `cmd` と入力し、 `コマンドプロンプト` を起動する。
![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/fc39c144-8c41-da1f-c6c7-9040df3cd469.png)
2. `mysql -u ユーザ名 -p` で `ログイン` する。
![08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/36e7e29a-dd1f-4076-22d7-943c76b11da3.png)
![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/5a46a7cf-01d4-0eb2-652e-d8ec41cfa1ef.png)

```SQL:test.sql
create database test DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE USER 'test'@'localhost' IDENTIFIED BY 'test';
GRANT ALL PRIVILEGES ON test.* TO 'test'@'localhost';

use test;

CREATE TABLE test1( 
    id TINYINT ZEROFILL NOT NULL AUTO_INCREMENT,
    name VARCHAR(50),
    PRIMARY KEY(id));

INSERT INTO `test1`(`name`) VALUES ("test1");
INSERT INTO `test1`(`name`) VALUES ("test2");
INSERT INTO `test1`(`name`) VALUES ("test3");
INSERT INTO `test1`(`name`) VALUES ("test4");
```
2. 上記の `SQL文` をコピーし、 `コマンドプロンプト` 内で実行する。
3. 画像のように `Query OK` が出れば成功。

## 3.Spring Boot プロジェクトの作成
![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/4f942089-ee64-25b8-259f-3ff278f66d79.png)
1. `[ファイル(F)]→[新規(N)]→[Spring スターター・プロジェクト]` を選択する。
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/064ebf47-b8c2-2d10-9c83-64192cdaf050.png)
2. 名前に `MyBatisTest` と入力し、`Javaバージョン：8` を選択して `次へ(N) >` ボタンをクリックする。
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/dae5d1e0-36ae-cc35-ca5a-1688fdaaacb9.png)
3. `Spring Boot バージョン:2.3.1` , `Lombok` , `JDBC API` , `MyBatis Framework` , `MySQL Driver` , `Thymeleaf` , `Spring Web` を選択し、`完了` ボタンをクリックする。

## 4.Spring Boot プロジェクトの実行
```bash:フォルダ構成
MyBatisTest
└─ src
     └─ main
          ├─ java
          │   └─ com
          │        └─ example
          │             └─ demo
          │                  ├─ Entity.java
          │                  └─ TestController.java
          └─ resources
               ├─ application.properties
               ├─ mybatis-config.xml
               ├─ sample_mapper.xml
               │  
               ├─ static
               └─ templates
                    └─ index.html
```

```java:Entity.java
package com.example.demo;

import lombok.Data;

@Data
public class Entity {
	private int id;
	private String name;
}
```

```java:TestController.java
package com.example.demo;

import java.io.InputStream;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class TestController {
    // ルートとなる設定ファイルを読み込む
	InputStream in = TestController.class.getResourceAsStream("/mybatis-config.xml");

	// 設定ファイルを元に SqlSessionFactory を作成する
	SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);

	// SqlSessionFactory から SqlSession を生成する
	SqlSession session = factory.openSession();

    @GetMapping("/")
    public String index(Model model) {

    	// SqlSession を使って SQL を実行する
    	List<Entity> result = session.selectList("sample.mybatis.selectTest");

        model.addAttribute("Test", result);
        return "index";
    }
}
```

```properties:application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8&serverTimezone=JST
spring.datasource.username=test
spring.datasource.password=test
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto = update
```

```xml:mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <environments default="sample_id">
    <environment id="sample_id">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost/test?serverTimezone=JST"/>
        <property name="username" value="test"/>
        <property name="password" value="test"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="sample_mapper.xml"/>
  </mappers>
</configuration>
```

```xml:sample_mapper.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="sample.mybatis">
  <select id="selectTest" resultType="com.example.demo.Entity">
    select * from test1
  </select>
</mapper>
```

```html:index.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org/">
  <head>
    <title>Test</title>
    <meta charset="utf-8" />
  </head>
  <body>
    <ul>
      <li th:each="entity : ${Test}">
        [[${entity.getId()}]]
        [[${entity.getName()}]]
      </li>
    </ul>
  </body>
</html>
```


1. 上記のフォルダ構成のようにファイルを配置し、 `MyBatisTest [boot]` を右クリックして `[実行(R)]→[5 Maven install]` 選択する。
![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/481ed588-609d-49a2-3750-988a813e5d9b.png)

```
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  4.125 s
[INFO] Finished at: 2020-07-05T21:50:22+09:00
[INFO] ------------------------------------------------------------------------
```
2.`コンソール` に 上記の文が表示されれば成功。　
![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/5c02609e-8d72-ecb6-811f-7852a8cbc368.png)
3.`MyBatisTest [boot]` を右クリックして `[実行(R)]→[9 Spring Boot アプリケーション]` 選択する。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/3c9d3419-fa17-9c0a-b1aa-892cb39a0166.png)
4. [localhost:8080](http://localhost:8080/) にアクセスし、画像のように表示されれば成功。

## 5.GitHub
GitHubにソースコードを公開しています。

https://github.com/ryomeblog/qiita/tree/master/%E3%80%90%E5%AE%9F%E8%B7%B5%E2%80%BC%E3%80%91MyBatis%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E9%9A%9B%E3%81%AE%E6%9C%80%E4%BD%8E%E9%99%90%E3%81%AE%E8%A8%AD%E5%AE%9A


## 6.関連
- [【覚えておくと便利!!!】Eclipseにおけるコンストラクタとgetter/setterの簡易作成](https://qiita.com/ryome/items/6c487ccc0c39847cd55f)
- [【覚えておくと便利!!!】Eclipseにおける継承クラスの簡易作成](https://qiita.com/ryome/items/4fcf62b4bc60fb6a4d07)
- [【覚えておくと便利!!!】MySQLの文字コード変更](https://qiita.com/ryome/items/b1f0f7055d2d614fb605)
- [【初心者でもできる‼】Javadocの書き方](https://qiita.com/ryome/items/4f2d5928c8aaf195f407)
- [【わかりやすく解説‼】Javaのオーバーロードの使い方](https://qiita.com/ryome/items/f1ca8cc7538f4c6d26c0)
- [【わかりやすく解説‼】Javaのカプセル化の使い方](https://qiita.com/ryome/items/fc44dfad297b35bf7559)
- [【わかりやすく解説‼】Javaの継承の使い方【オーバーライドの解説あり】](https://qiita.com/ryome/items/97b82c5519e39d3f21c1)
- [【わかりやすく解説‼】Javaにおける参照型の型変換](https://qiita.com/ryome/items/2453949b978bf166e204)
- [【わかりやすく解説‼】Javaのポリモーフィズムの使い方](https://qiita.com/ryome/items/a22457797988c548ec62)
- [【わかりやすく解説‼】ArrayListの使い方【Java】](https://qiita.com/ryome/items/cc01a7b6914e5b8b1579)
- [【実践‼】JFrameの導入（画面作成まで解説）](https://qiita.com/ryome/items/a45e0db4f7456e62d8d8)
- [【実践‼】Javaデータベース連携（Connector/J 8.0.20）](https://qiita.com/ryome/items/c78534200ae725ad571b)
- [【実践‼】SQLステートメントの実行](https://qiita.com/ryome/items/44ef641ea53595130f55)
- [Javaプログラミングの全て](https://qiita.com/ryome/items/d1ec1824431dbd182b91)