🌊

VScodeでSpringBoot + MyBatisプロジェクトを作成する

2021/01/24に公開

はじめに

Visual Studio Codeで「SpringBoot + MyBatis」でプロジェクトを作成します。
本記事ではSpringBoot + MyBatisでDBアクセスまで行うことを目標としています。
また、今回使用するDBは「SQLite3」です。

作業環境

  • macOS Catalina バージョン 10.15.5
  • OpenJDK 11.0.9.1
  • Visual Studio Code

SpringBootプロジェクトを作成する。

その1: コマンドパレットを起動し、「Spring Initializr: Create a Maven Project」を選択します。
今回はMavenプロジェクトで作成したいので、Create a Maven Projectの方を選択します。
Spring Initializr

その2: SpringBootのバージョンを選択します。
今回は2.4.2を選択します。
バージョン

その3: 使用言語を選択します。
Javaを選択します。
言語

その4: プロジェクト名を入力します。
特に変更しない場合は何も入力せずにEnterキーを押しましょう。
プロジェクト

その5: パッケージ名を入力します。
こちらも特に変更がない場合は何も入力せずにEnterキーを押しましょう。
パッケージ

その6: パッケージングタイプを選択します。
今回はどちらを選んでも目標を達成できるので、JARを選択します。
パッケージングタイプ

その7: Javaのバージョンを選択します。
今回使用してるのはOpenJDK11のため、11を選択します。
バージョン

その8: 依存関係を追加します。
下記の画像のものをいったん追加しています。
※ここで入れ忘れた物は後でも追加できます。
依存関係

プロジェクトが表示され、右下に画像のようなポップアップが出現するので、「Now」を押します。
(依存関係を追加するたびに出現するのが面倒という人は「Always」を選択しましょう。)
ポップアップ
※初回は時間がかかるかもしれませんが気長に待ちます。
パッケージのダウンロードが完了したところで、いったん起動してみます。

DemoApplication.javaを開き、mainメソッドの上にあるRunをクリックします。
起動すれば成功です。
起動

DBを追加

DBはSQLite3を使用したいので、使用するための準備を行います。
その1: mavenに依存関係を追加します。
pom.xmlに以下の依存関係を追加します。

        <dependency>
			<groupId>org.xerial</groupId>
			<artifactId>sqlite-jdbc</artifactId>
			<version>3.34.0</version>
		</dependency>

保存をし右下に出現するポップアップで「Now」をクリックします。
(初回に「Always」を押した人は出現しません。)

その2: DBを作成し、データを投入します。
今回は「demo」配下に「db」フォルダを作成し、そこに「database.sqlite3」という名前でDBを作成します。
ターミナルを起動し、DBを作成したディレクトリに移動し、SQLite3を起動しデータを投入します。

sqlite3 database.sqlite3
SQLite version 3.28.0 2019-04-15 14:49:49Enter ".help" for usage hints.
sqlite> create table test_table(name);
sqlite> insert into test_table values('apple');
sqlite> insert into test_table values('banana');

MyBatisの準備

その1: demo/resources直下に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="org.sqlite.JDBC"/><!-- sqliteのドライバーを設定 -->
                <property name="url" value="jdbc:sqlite:demo/db/database.sqlite3"/><!-- dbのファイルパス -->
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="sample_mapper.xml"/>
    </mappers>
</configuration>

その2: SQLを記載するためのxmlファイルを作成します。
demo/resources直下に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="map">
        select * from test_table
    </select>
</mapper>

実際に表示してみる

その1: Controllerを作成します。
今回はControllerクラスからデータアクセスをするので、必要な情報を書いていきます。
demo直下にcontrollerディレクトリを追加し、SampleController.javaを作成します。

package com.example.demo.controller;

import java.io.IOException;
import java.io.Reader;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.io.Resources;
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.RequestMapping;

@Controller
public class SampleController {

    @RequestMapping("/")
    public String index(Model model) {
        String resource = "mybatis-config.xml";
        try (Reader in = Resources.getResourceAsReader(resource)) {
            // ★設定ファイルを元に、 SqlSessionFactory を作成する
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);

            // ★SqlSessionFactory から SqlSession を生成する
            SqlSession session = factory.openSession();
            // ★SqlSession を使って SQL を実行する
            List<Map<String, Object>> result = session.selectList("sample.mybatis.selectTest");
            // modelに追加
            model.addAttribute("results", result);
        } catch (IOException e) {
            // nop
        }

        return "index";
    }
}

その2:画面表示するためのテンプレートを作成します。
今回はthymeleafを使用して、demo/resources/templatesにindex.htmlを作成します。
とりあえずDBで取得した内容を表示できれば良いので、中身はかなり適当に書きました。

<!DOCTYPE html>
<html lang="ja" xmlns:th="http://wwww.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <p>
        <span th:text="${results}">test</span>
    </p>
</body>
</html>

プロジェクトを起動しhttp://localhost:8080/
でDBに登録した内容が表示されれば成功です。

最終的なディレクトリ構成は下記の通りです。
構成

最後に・・・

以上、SpringBoot + MyBatisでDBアクセスするところまで作成できました。
今まではjavaの開発はeclipseやIntelliJがほとんどでしたが、Visual Studio Codeでも簡単に作成できることに気付けたのは大きな収穫でした。

Discussion