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


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

準備

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

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

eclipseマーケットプレイスでstsと検索しインストールボタンを押下。

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

Spring Bootプロジェクト作成

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

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

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

フォルダ構成


こんな感じで行きます。

クラスの作成

1-1コントローラ作成

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";
    }
}

サービス作成

HelloSerivce.java
@Service
public class HelloService {

    @Autowired
    private HelloMapper helloMapper;

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

Dao作成。

CREATE TABLE emp_name(
id int,
name varchar(20)
)

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

HelloMapper.java
@Mapper
public interface HelloMapper {

    List<HelloBean> selectEmpAll();
}
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作成

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の変数名に紐付けてくれる設定を追加。
今回は特に使用しないが覚えておきたい。

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を読み込ませる

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との接続設定を追加。

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 を開く。

こんな感じになればOK。

所感

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