Spring Boot+MyBatis+PostgreSQLでデータ取得まで

ちょっと前はそんなに悩まなかったけど、
最近やったら意外と手こずったので、自分用メモに。

#準備
1. Java8インストール
2. eclipseインストール
3. PostgreSQL11インストール

#eclipseにSpring Tool 3 Add-On(STS)インストール

eclipseマーケットプレイスでstsと検索しインストールボタンを押下。
![スクリーンショット 2019-04-07 18.50.53.png](https://qiita-image-store.s3.amazonaws.com/0/393835/9385f91d-831d-8a8b-3bf5-bf21b9e13288.png)


専用の開発ツール（STS）を使用してもいいですが、
今回はプラグインを使用します。

#Spring Bootプロジェクト作成
新規→プロジェクト→Spring スターター・プロジェクトを選択し、

![スクリーンショット 2019-04-07 18.55.47.png](https://qiita-image-store.s3.amazonaws.com/0/393835/e1850ffe-ed85-cc7d-556b-e18db7717959.png)

依存関係はこんな感じで。

![スクリーンショット 2019-04-07 18.56.28.png](https://qiita-image-store.s3.amazonaws.com/0/393835/20a00f42-e3cd-a40a-3097-95dbd6e1e4db.png)

完了押下でプロジェクト作成はOK。

#フォルダ構成

![スクリーンショット 2019-04-07 19.43.43.png](https://qiita-image-store.s3.amazonaws.com/0/393835/0735c875-c26b-e4a5-d3fa-ce1bdf587b5f.png)
こんな感じで行きます。

#クラスの作成
###1-1コントローラ作成

```java:HelloController.java
@Controller
public class HelloController {

	@Autowired
	private HelloService helloService;

	@RequestMapping(value="hello")
	public String init(Model model) {

		List<HelloBean> list = helloService.selectName();
		model.addAttribute("list",list);

		return "hello";
	}
}
```

###サービス作成

```java:HelloSerivce.java
@Service
public class HelloService {

	@Autowired
	private HelloMapper helloMapper;

	public List<HelloBean> selectName(){
		return helloMapper.selectEmpAll();
	}
}
```

###Dao作成。

```sql:
CREATE TABLE emp_name(
id int,
name varchar(20)
)
```

上記内容でテーブルを作成。
テスト用なので、PRIMARYもUNIQUEもとりあえず設定なしで。

```java:HelloMapper.java
@Mapper
public interface HelloMapper {

	List<HelloBean> selectEmpAll();
}
```

```xml:HelloMapper.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="com.demo.mapper.HelloMapper">
	<select id="selectEmpAll" resultType="com.demo.bean.HelloBean">
		select * from
		emp_name
	</select>
</mapper>
```

###html作成

```html:hello.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>
		</tr>
		<tr th:each="emp : ${list}">
			<td th:text="${emp.id}"></td>
			<td th:text="${emp.name}"></td>
		</tr>
	</table>
</body>
</html>
```

#環境設定

mybatisのconfigを作成。
テーブルのカラム名がスネークケースになっている場合はキャメルケースに変換し、
Beanの変数名に紐付けてくれる設定を追加。
今回は特に使用しないが覚えておきたい。

```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>
	<settings>
		<setting name="mapUnderscoreToCamelCase" value="true"/>
	</settings>
</configuration>
```

作成したmybatis-configを読み込ませる

```java:SampleApplication.java
package com.demo;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.ClassPathResource;

@SpringBootApplication
public class SampleApplication {

	public static void main(String[] args) {
		SpringApplication.run(SampleApplication.class, args);
	}

    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        // コンフィグファイルの読み込み
        sessionFactory.setConfigLocation(new ClassPathResource("/mybatis-config.xml"));

        return sessionFactory.getObject();
    }
}
```

DBとの接続設定を追加。

```properties:application.properties
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/sample
spring.datasource.username=postgres    #自身の環境に合わせて 
spring.datasource.password=postgres    #自身の環境に合わせて
```

以上で完了。

#実行
プロジェクトを右クリックし、実行→maven install
BUILD SUCCESSが出たら、再度右クリック、実行→Spring boot アプリケーション選択
ブラウザから http://localhost:8080/hello を開く。

![スクリーンショット 2019-04-07 20.07.13.png](https://qiita-image-store.s3.amazonaws.com/0/393835/b63bd55a-92c2-926f-7e08-4ef39c3bc4f2.png)

こんな感じになればOK。

#所感
SpringMVCに比べると設定は減ったのかな？
慣れればわかりやすいと思います。