MyBatis Generatorの導入手順

# はじめに
Spring Bootの勉強過程でMyBatisを用いてデータベース接続を行おうとしているのだが、
テーブル定義に則ったentityクラスを作る際、１つ１つ手作業で全カラムのフィールドを作成するのは骨が折れる。

以下のようなテーブルが複数あった場合、テーブルごとにentityクラスを作成する必要があるが...

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503230/e0a71a20-c689-7f07-d2d9-bbc985f8fd43.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503230/ccc0718e-136e-c716-8bf4-eb91c5572413.png)

１つ１つカラム名見て、データ型見て...と、勉強用の開発ならチマチマ手作業で行ってもいいのだが、業務で開発を行う際はテーブル・カラムの量が個人でやる比じゃないため、さすがに面倒くさいし、カラム名・データ型の宣言ミスが起こる可能性も高くなる。

そのため、既存のデータベースから自動でentityクラスを作ってくれたら嬉しいよねということで、MyBatis Generatorというツールを用いる。

# 前提
・IDE：eclipse
・データベース：MySQL（用いるデータベースおよびテーブルの作成は完了済み）
・Springスタータープロジェクトにより作成したプロジェクト（タイプ：Mavenプロジェクト）

# 手順①MyBatis Generatorをダウンロードする
パターン１、あるいはパターン２の方法でMyBatis Generatorのダウンロードを行う。
パターン１の方が楽だが、うまくインストールできない場合はパターン２の方を試してみる。
筆者はパターン２の方法でダウンロードを行う。

## パターン１)Mavenを用いる

プロジェクト作成時に生成されたpom.xmlに、以下の記述（6-10行目）を行い保存することで、ライブラリのダウンロードおよびビルドパスへの反映を自動で行ってくれる。

```
	<build>
		<plugins>
			<plugin>
				...
			</plugin>
			<plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.1</version>
            </plugin>
		</plugins>
	</build>
```

ただ、自分の場合うまく反映されなかったため、別の手法でダウンロードを行う。
（他のライブラリはmavenからダウンロードできたのに何故だ...）

## パターン２）マーケットプレイスより直接ダウンロードを行う

１：ヘルプ→Eclipseマーケットプレイス

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503230/e5fcbec6-e292-f2d0-a08e-3184c2bd078b.png)

２：検索欄に「MyBatis」と入力し、「MyBatis Generator」をインストールする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503230/28ed220d-5bd9-f77c-7a45-3bf3dbcfa1a7.png)

３：MyBatis Generatorが適用されているかの確認
適当なxmlファイル（pom.xmlなど）を右クリック→実行→Run MyBatis Generator
Run MyBatis Generatorと表示されていればダウンロード成功
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503230/561d4648-1970-1a91-3c7e-0575faf4b1b9.png)


# 手順②Configファイルを作成する
src/main/resources下に「generatorConfig.xml」を作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503230/9840cf39-71c8-919b-e29b-085f5b345285.png)

generatorConfig.xmlに下記情報を記載する
（参考記事①を参考）

```
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration>
    <classPathEntry
        location="C:/Users/user/.m2/repository/mysql/mysql-connector-java/8.0.22/mysql-connector-java-8.0.22-sources.jar" />
    <context id="context1">
 
<!--     JDBCの設定です (1) -->
        <jdbcConnection
            driverClass="com.mysql.cj.jdbc.Driver"
            connectionURL="jdbc:mysql://localhost:3306/sbsample1?serverTimezone=JST"
            userId="root"
            password="root"
        />
 
<!--     自動生成するエンティティの設定です (2) -->
        <javaModelGenerator
            targetPackage="com.example.entity1"
            targetProject="SpringBootSample7-1/src/main/java/"
        />
        <!-- 
        <sqlMapGenerator
            targetPackage="com.example.entity2"
            targetProject="SpringBootSample7-1/src/main/java/"
        />
        -->
        
        <javaClientGenerator
            targetPackage="com.example.entity3"
            targetProject="SpringBootSample7-1/src/main/java/"
            type="XMLMAPPER"
        />
 
<!--     生成対象のテーブルです（3) -->
        <table schema="sbsample1" tableName="m_user" />
    </context>
</generatorConfiguration>
```

### データベースコネクタへのクラスパスの設定
<classPathEntry
        location="C:/Users/user/.m2/repository/mysql/mysql-connector-java/8.0.22/mysql-connector-java-8.0.22-sources.jar" />
クラスパスは「Maven依存関係」ディレクトリより確認できる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503230/b1a6b05f-9e85-50ef-8375-f67694494025.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503230/683e7e62-d1b7-f115-6223-74893c2eec86.png)

### その他の要素の説明は色々なところで解説されているので、割愛します。参考記事を参照ください。

# 手順③generatorConfig.xmlの実行
generatorConfig.xmlを右クリック→実行→Run MyBatis Generator

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503230/064224c1-76c9-4141-25dd-d3a0450f47a2.png)

すると...

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503230/750141ed-9b3d-e4bb-2eaf-5b0af4e3aa8e.png)

指定したパッケージにentityクラス（MUser.java)が作成されていることを確認

# おわりに
DynamicSqlSupportクラスってなんぞという感じだが、当初の目的ではとりあえずentityクラスを自動生成できればOKという感じなので、ひとまずこれにて終了ということにする。

## 参考サイト・参考記事
①https://www.casleyconsulting.co.jp/blog/engineer/211/
②https://www.purin-it.com/spring-boot-mybatis-generator
③https://qiita.com/ketman55/items/abcc1e23dcac0cc268b5
④https://mybatis.org/generator/index.html

※今回の記事のプロジェクトは、下記書籍のプロジェクトをもとに作成しています。
https://www.amazon.co.jp/%E5%BE%8C%E6%82%94%E3%81%97%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%81%AESpring-Boot-%E5%85%A5%E9%96%80%E6%9B%B8%EF%BC%9ASpring-%E8%A7%A3%E4%BD%93%E6%96%B0%E6%9B%B8%EF%BC%88%E7%AC%AC2%E7%89%88%EF%BC%89Spring-Boot%E3%81%8C%E4%B8%B8%E5%88%86%E3%81%8B%E3%82%8A/dp/4802092865/ref=sr_1_1?keywords=spring+boot+%E5%85%A5%E9%96%80&qid=1645930429&sprefix=%EF%BD%93%EF%BD%90%EF%BC%A9%EF%BC%AE%EF%BC%A7%E3%80%80%EF%BC%A2%EF%BC%AF%EF%BC%AF%2Caps%2C318&sr=8-1