【Java初心者】springboot+mybatis+MySQL(Docker)で開発環境を作成する手順!

2024-06-06

どうも!ヒグッティ(X→ヒグッティ@システムエンジニア)です!
今回は、springbootとmybatisとMySQLを使った開発環境の作成方法を解説します!!Javaといえばspringbootですが、いざ勉強しようと思っても開発環境を作成するだけで心が折れそうになりますよね、、そんな苦労をせず開発環境を作成できるように手順を公開します!

開発環境

  • Windows11
  • Docker v20.10.24
  • spring boot
  • eclipse 2023

前提

今回はeclipseを使って自身のPCにspringbootとMySQLを動作できる環境を構築します。事前にDockerとeclipseをダウンロード、インストールする必要がありますが、ここでは割愛します。
では、作成手順を見ていきましょう!

eclipseでspringbootのプロジェクトを作成

まずは下記画像のようにeclipseからspringのプロジェクトを作成します

今回はMavenでJava17を使います。

少しハマったのですが、Spring Bootのバージョンが3.2.6にしないと「My Batis」を選択できませんでした!どゆこと?知っている人がいたらXのDMで教えてください!

以下の画面をもってプロジェクトの作成は完了です。

MySQL(Docker)の準備

Dockerを使ってMySQLを構築したいと思います。自身のPCに直接MySQLをインストールしてもよいですが、構築が簡単で再利用もしやすいのでDockerを利用します。ここでは詳しい手順は割愛します。

まずは以下のようにディレクトリとファイルを作成します。

以下、各ファイルの内容です。

docker-compose.ymlです。

version: '3'
services:
  mysql:
    platform: linux/x86_64
    build: ./mysql
    ports:
      - 3306:3306
    volumes:
      - ./testdata:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=passwordpassword
      - MYSQL_DATABASE=javatest
      - MYSQL_USER=javatest
      - MYSQL_PASSWORD=passwordpassword

Dockerfileです。

FROM mysql:5.7

COPY ./conf.d/mysql.cnf /etc/mysql/conf.d/mysql.cnf
COPY ./mysql.conf.d/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf

mysqld.cnfです。MySQLのserver側の設定をしています。

[mysqld]
datadir		= /var/lib/mysql

character-set-server=utf8mb4
collation-server=utf8mb4_bin

mysql.cnfです。クライアント側とサーバ側の設定を指定しています。

[mysql]
default-character-set=utf8mb4

[client]
default-character-set=utf8mb4

上記の設定で「docker-compose.yml」の存在するディレクトリ内で「docker-compose up -d」を実行すればMySQLのコンテナが作成完了です。

SpringBootでHello World的なやつを作る!

前置きは長くなりましたが、やっとSpringBootを触っていきます!

まずは設定ファイル(application.properties)です。

spring.application.name=demo

spring.datasource.url=jdbc:mysql://localhost:3306/javatest
spring.datasource.username=root
spring.datasource.password=passwordpassword
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
mybatis.configuration.map-underscore-to-camel-case=true

重要なのは「spring.datasource.~」で始まるプロパティですね!作成したMySQLの設定をここで追記します。ユーザ名やパスワードを間違えるとDBに接続できません!
また「mybatis.configuration.map-underscore-to-camel-case=true」はmybatisで必ず必要な設定なので必ず記載しましょう!

次にJavaのソースを見ていきます。SpringBootのスタート時に呼ばれるファイルは以下のファイルになります。注目するのは「SpringApplication.run(Hello.class, args);」です。Hello.javaを呼び出しています。これは後で作成します!

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

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

}

Hello.javaを作成します。まずはハローワールド的なものを表示できるようなものを作成します。

package com.example.demo;

import java.util.Map;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api")
public class Hello {
	@GetMapping("/hello")
    public Map<String, String> getData() {
        Map<String, String> map = Map.of("text", "Hello World!");
        return map;
    }
}

この状態でeclipseからこのプロジェクトを実行開始します!ブラウザで「http://localhost:8080/api/hello」を入力し{“text":"Hello World!"}と画面に表示されればひとまず完了です。

SpringBootからMySQLのテーブルを検索して値を取得する

まずはMySQLにテーブルを作成します。以下のような感じでテーブルを作成します。私はA5MKのようなクライアントツールを使ってテーブルを作成しました。ついでに1~2件データも作成しておきましょう!

CREATE TABLE userhi (
  `user_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `user_name` varchar(100) NOT NULL DEFAULT '',
  `user_email` varchar(255) NOT NULL DEFAULT '',
  `user_reg_datetime` datetime NOT NULL,
  `user_update_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `del_flg` tinyint(1) unsigned NOT NULL DEFAULT 0,
  PRIMARY KEY (`user_id`)
) DEFAULT CHARSET=utf8mb4;

DBの値をバインドさせるクラスを作成します。テーブルのカラム名とjavaのクラスの変数名は、「_」区切りを大文字に変換してjavaのクラスの変数にバインドされるので変数名に注意してください。

package com.example.demo.domain;

import java.time.LocalDateTime;

import lombok.Data;

@Data
public class Userhi {
	private Integer userId;
	private String userName;
	private String userEmail;
	private LocalDateTime userRegDatetime;
	private LocalDateTime userUpdateStamp;
	private int delFlg;

}

mybatisのリポジトリクラスを作成します。このクラスではSQL文を作成するクラスと思ってください!

package com.example.demo.repo;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import com.example.demo.domain.Userhi;

@Mapper
public interface UserhiRepo {

    @Select("SELECT user_id, user_name, user_email, user_reg_datetime,user_update_stamp,del_flg FROM userhi")
    List<Userhi> findAll();
}

最後に先ほど作成したHello.javaを修正します。

package com.example.demo;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.example.demo.domain.Userhi;
import com.example.demo.repo.UserhiRepo;

@RestController
@RequestMapping("/api")
public class Hello {
	@Autowired
	UserhiRepo userRepo;

	@GetMapping("/hello")
    public Map<String, String> getData() {
        Map<String, String> map = new HashMap<String, String>();
        // 全件検索
        List<Userhi> list = userRepo.findAll();

        for(Userhi user: list) {
        	map.put(user.getUserName(), user.getUserEmail());
        }
        return map;
    }

}

これで再びブラウザに「http://localhost:8080/api/hello」と入力してみると、テーブルに登録した値が返却されているはずです!!

私は「{“higu":"higu@higu.com"}」と画面に表示されました!

まとめ

ここまで、springbootとmybatisとMySQLの開発環境の構築が完了しました!最初の環境構築って時間かかりすぎて挫折しますよね、、本手順を見てうまくいかないこともあると思いますが、その時はDM待っています!基本的には私のコードをコピペしてもらえれば動くようになっています!手順は多いですが、これを構築できればあとはフレームワークやSQLの勉強が捗ると思います!!

今回はMavenで作成しましたが、Gradle-Groovyで作成したらWebサーバが無いと怒られて画面を表示できませんでした、、なんで?知っている人いたら教えてください!

それにしても開発環境を作るだけでJavaやSQLやDockerなど覚えることが多くて大変ですね、、

スポンサーリンク