Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
9
Help us understand the problem. What are the problem?
@y_ogawa_naaaa

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

目的

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

概要

MySQLのインストール

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

※インストール方法については下記リンク参照
DBOnline

データベースの作成

アプリケーションで作成するデータベースを作成する
A5:SQL MK-2を使用します。

※データベースの接続方法については割愛しますが下記リンクを参照
データベースへの接続方法

テーブルの作成

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

【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

確認できた (๑˃̵ᴗ˂̵)و ヨシ!(名前は気にしないでね)

アプリケーションの実装

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

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

image.png
image.png

パッケージ・エクスプローラーにプロジェクトが表示された╭( ・ㅂ・)و ̑̑ グッ !
image.png

フォルダ構成

image.png

application.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 してくれる

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;
    }
}
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();
}
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 ファイルを作成します。

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 の配置します。

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>ID</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

次回

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
9
Help us understand the problem. What are the problem?