いやいや・・ついに Spring Boot に手を出してしまいました。

 

 

今回は、Spring Boot で何かかんたんなチュートリアル的なものが作りたくてやってみました。

というのも、表題にあるような Spring Boot + MySQL + MyBatis + MyBatis Generator という組み合わせではあまりチュートリアル的なものがなかったので、自身で構築したものを参考にしてひとまず簡単なたたき台ができるようにしています。

 

なぜ Spring Boot + MySQL + MyBatis + MyBatis Generator なのか?

Spring Framework は Struts に比べれば随分と XML ファイルによる設定を書く量が減りましたが、それでも設定のために費やす部分がかなり多く、面倒くさく感じることも多いです。そんな Spring Boot の面倒な設定を書いたりする作業等を一気に減らしてくれる優れものです。

MyBatis は、古くからある O/Rマッパーの一つですが、SQL いらずで書ける Hibernate にくらべて、ある程度は SQL を書かせてくれる O/R マッパーです。これに、 MyBatis Generator を組み合わせると、かなり便利になります1

というのも、MyBatis だけの場合は、

  1. データベースにテーブルでビューを作成
  2. データベースのテーブルと対になる POJO クラスを作成
  3. データベースアクセス用のインターフェースクラスを作成
  4. インターフェースクラスに対応したマッパーXML を作成

を、自分の手を動かして 作成しなければいけません2

この後は、 MyBatis-Spring が XMLマッパーを元に実装クラスを生成し、Bean として Springframework から使えるようにしてくれるので、そのあたりは助かるのですが、MyBatis Generator を使用すれば、この 2 ~ 4 までの項目は全て自動で作成してくれることになります。

この部分だけ読んでも、何かよくわからないと思われる方もおられるかもしれませんが、要するに、

めちゃくちゃ楽になる んです。

この、書かなければいけない部分を補ってくれるのが、MyBatis Generator なんです。

 

作業環境

今回の作業にあたっては、次の環境上で行っています。

  • 開発環境: Spring Tool Suite 4.5.1 (STS-4.5.1.RELEASE)
    = Eclipse 4.14.0.v20191210-0610
  • Spring Boot 2.2.4.RELEASE
  • MariaDB 10.4
  • プラットフォーム: Windows 10, Ubuntu 18.04

ですので、これ以降の作業は、上記の開発ツールや RDBMS が導入済みであることを前提として書いていきます3

 

定義

この記事における DB接続情報は以下であると定義しておきます。

  • Spring Boot のプロジェクト名: firstbootapp
  • グループID: org.ranc
  • アーティファクトID: firstbootapp
  • パッケージ名: org.rank.firstbootapp
  • DB接続URL: jdbc:mysql://192.158.10.147:3306/
  • DB接続ユーザー: someuser
  • DB接続パスワード: actua1passw0rd

これらは、自身の環境に合わせて読み替えてください。

 

Spring Boot のプロジェクトを作成する

Spring Tool Suite (STS) を開いて、File → New → Spring Starter Project として、Spring Boot の新しいプロジェクトを作成します。

Spring boot プロジェクト作成

Spring boot プロジェクト作成

次に必要なライブラリを選定します。今回選択したのは以下のとおりです。

  • Developper Tools: Spring Boot DevTools, Lombok
  • SQL: MyBatis Framework, MySQL Driver
  • Template Engines: Thymeleaf
  • Web: Spring Web

以上を選択したら、Finish でOKです。

Spring Starter Project ウィザード

Spring Starter Project ウィザード

パッケージエクスプローラーに新しいプロジェクトが表示されていると思います。

しばらくビルドに時間がかかると思うので、その場合はビルドが終了するまで待ってください。ビルドが終わると、プロジェクトは次のような構成になっていると思います。

プロジェクト作成直後のディレクトリ構成

プロジェクト作成直後のディレクトリ構成

 

application.properties に設定を入力

次に、初期設定を放り込みます。初期設定は、src/main/resources 直下にある、application.properties に入力します。

# Thymeleaf
spring.thymeleaf.cache=false
spring.thymeleaf.enabled=true
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html

spring.application.name=My First Boot Application.

# MySQL
spring.datasource.url=jdbc:mysql://192.168.10.147:3306/
spring.datasource.username=someuser
spring.datasource.password=actua1passw0rd
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

テンプレートエンジンとして使用する Thymeleaf のテンプレートリゾルバの設定と、DB接続情報を入力します。

  • テンプレートのキャッシュはしない。
  • テンプレートの保存先は、classpath:/templates/ 以下。要するに、src/main/resources/templates/ にテンプレートを作成する。
  • テンプレートの拡張子は、.html

DB接続情報については、最初に定義したとおりですが、spring.datasource.driver-class-name のドライバクラスは、com.mysql.cj.jdbc.Driver にしておかないと、Spring Boot 起動時に怒られます。

 

確認用のコントローラとビューの作成

 

コントローラの作成

まず、簡単なコントローラを作成します。

パッケージ、org.ranc.firstbootapp の直下に app というパッケージを追加して、その下に HelloController クラスを作成します。

HelloController クラスの作成

HelloController クラスの作成

 

実際のクラスの内容は以下のように入力します。

package org.ranc.firstbootapp.app;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HelloController {

    @GetMapping("/")
    public String hello(Model model) {
        model.addAttribute("greeting", "Hello, World!");
        return "hello";
    }
}

補足的に説明しておくと、@Controller アノテーションは、Springframework にこのクラスがコントローラであることを教えるためのものです。

@GetMapping("/") は、仮に Spring Boot アプリケーションをホストするコンピュータが localhost:8080 であるならば、クライアントがhttp://localhost:8080/GET メソッドでアクセスしたときに、この hello メソッドを実行することを意味します。これは、@RequestMapping(path = "/", method = RequestMethod.GET) と同じ意味になります。

メソッド内では、Model にページの遷移先に渡したい値を、greeting という属性名で渡し、最後に "home" という文字列を返しています。

この home という文字列はビュー名で、Thymeleaf のテンプレートリゾルバが、src/main/resources/templates/home.html をビューのページとして返すようにしています。

 

ビューの作成

続いて、ビューを作成します。

src/main/resources/templates/ の直下に hello.html を作成します。

パッケージエクスプローラーの templates フォルダを右クリックして、New → Other から、Web → HTML File として作成します。

HTML ファイルの作成

HTML ファイルの作成

 

ビューの内容は以下のようにして入力します。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Welcome!</title>
</head>
<body>
  <h1>Welcome!</h1>
  <p>
    <span th:text="${greeting}">ここにgreetingの値が入る</span>
  </p>
</body>
</html>

th:text が Thymeleaf の属性で、ここでは ${greeting} という式で、先程コントローラで Model に渡した際に付けた属性名を指定しています。この式は EL式 (正確には Spring-EL 式) と呼ばれ、Thymeleaf テンプレートエンジンが、この属性名で Model から値を取り出し、<span></span>の中身をその値で置き換えることを意味しています。

 

Spring Boot アプリケーションの実行

ここまでできたら、Spring Bootアプリケーションを実行してみます。Struts や、レガシーな Springframework アプリケーションでは、実行するためにサーバーの構成を・・・とやる必要があったのですが、Spring Boot はそんな必要がありません。

なぜなら、Spring Boot アプリケーションにはアプリケーション・サーバーが内蔵されているからです。

ですから、実行そのものは簡単です4

パッケージエクスプローラーのプロジェクト名 「firstbootapp」 を右クリックして、Run → Spring Boot App とするだけです。

うまく実行できれば、コマンドに次のようなログが表示されます。

Springboot起動時のログ

Springboot起動時のログ

 

では、ブラウザから次のURLにアクセスします。

http://localhost:8080/

以下のように表示されたらOKです。

Welcome Spring boot!

Welcome Spring boot!

 

うまく行かない場合は、「application.properties に設定を入力」 から順に見直してみてください。

表示されたのが確認できたら、file のアイコンをクリックして、サービスを停止させます。

 

 


  1. SQL 書ける人は、なるべく SQL 書いて処理したくなるのではないでしょうか? 

  2. 更にレガシーな Springframework だと、インターフェースクラスの Bean 定義や マッパーXML の登録なども全部自分でしないといけません。 

  3. 仮に Windows 10 に MySQL や MariaDB 等を構築してもほぼ同様だと想われるので、環境に応じて以下の記事を読み替えてください。 

  4. Spring Tool Suite はその辺り簡単に実行してくれるように構成されていますからね。 


 
記事を共有する

zaturendo

中小企業社内SE。

0件のコメント

コメントを残す

メールアドレスが公開されることはありません。