【第四回】MyBatis Generatorの実行方法と流れ

#はじめに
DreamHanksの松下です。今回はMyBatis Generatorを実行した際の動きについて解説していきます。

[連載記事まとめ](https://qiita.com/DreamHanks/items/7df703a509ef22f64d2c)

#MyBatis Generatorとは

MyBatis はカスタム SQL、ストアドプロシージャ、高度なマッピング処理に
対応した優れた永続化フレームワークです。

ざっくり説明すると
JavaプログラムとDB間のデータを相互に変換授受してくれる通訳のようなものです。
（Object-Relational Mapper(O/RM)の一種）Java ObjectとMapperの自動生成機能そのものです。



#mybatis-generator.xmlについて

このxmlファイルがMyBatis Generatorの実行ファイルとなります。
実行することによって、下記の３つのクラスを作成してくれます。
・Dao
・Dto
・Mapper


```mybatis-generator.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:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\mysql-connector-java-8.0.11.jar"></classPathEntry>
<context id="context1">
<jdbcConnection connectionURL="jdbc:mysql://localhost:3306/work_db?characterEncoding=UTF-8&amp;serverTimezone=UTC&amp;useSSL=false"
driverClass="com.mysql.cj.jdbc.Driver"
password="Daiki8863" userId="root" />
<javaModelGenerator targetPackage="com.dreamhanks.dto" targetProject="WorkManager/src/main/java" />
<sqlMapGenerator targetPackage="mappers" targetProject="WorkManager/src/main/resources" />
<javaClientGenerator targetPackage="com.dreamhanks.dao" targetProject="WorkManager/src/main/java" type="XMLMAPPER" />
<table schema="work_db" tableName="member"/>
<table schema="work_db" tableName="worktime"/>
</context>
</generatorConfiguration>
```

##一つづつソースの意味を解説していきます。

```php
<classPathEntry location="C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\mysql-connector-java-8.0.11.jar"></classPathEntry>
```

上記の記載はDBとの接続を図るためのものです。
DB接続を行うために「mysql-connector-java-8.0.11」というライブラリを使います。


```php
<jdbcConnection connectionURL="jdbc:mysql://localhost:3306/work_db?characterEncoding=UTF-8&amp;serverTimezone=UTC&amp;useSSL=false"
driverClass="com.mysql.cj.jdbc.Driver"
password="Daiki8863" userId="root" />
```
上記の記載は接続するDBの設定です。
上から順に
・DBの場所の特定
・DB接続する際のpasswordの設定
・DB接続する際のuserIdの設定

```php
<javaModelGenerator targetPackage="com.dreamhanks.dto" targetProject="WorkManager/src/main/java" />
<sqlMapGenerator targetPackage="mappers" targetProject="WorkManager/src/main/resources" />
<javaClientGenerator targetPackage="com.dreamhanks.dao" targetProject="WorkManager/src/main/java" type="XMLMAPPER" />
```
上記の記載は作成するものをどこに作るのかを設定しています。
上から順に
・DTOをどこに作るか？
・Mapperをどこに作るか？
・DAOをどこに作るか？


```php
<table schema="work_db" tableName="member"/>
<table schema="work_db" tableName="worktime"/>
```
上記の記載は作る対象を設定しています。
順に
・スキーマの設定
・対象のテーブル名の設定


##MyBatis Generator実行方法
①「プロジェクト右クリック」　⇒　「実行」　⇒　「実行の構成」
　　⇒　「MyBatis Generator右クリック」　⇒　「新規作成」

②名前を開発対象のプロジェクト名にする
③構成ファイルを開発対象のプロジェクトの[mybatis-generator.xml]があるパスまで通す

例：
「${workspace_loc:/WorkManager/src/main/resources/mybatis-generator.xml}」

③実行
下記のようにmybatis-generator.xmlで指定したディレクトリに以下のファイルが出来ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/708649/b4318938-baf3-8978-4078-df18c88ceace.png)


◆Daoクラスについて
データベースの接続、切断、SQLの発行など、データベースへのアクセスを専門に扱うクラスです。
Serviceクラスから呼ばれるインターフェースメソッドがまとめられています。


◆Mapperクラスについて
上記のDaoのメソッドと紐づくSQL文をxml形式でマッピングしているクラスです。

◆Dtoについて
上記の流れでDBからデータを取得した際に、取得したデータを保持するための箱のようなものです。
・getter,setterメソッドを使ってControllerとの値のやり取りができます。
・View(JSP)からもpathingして値のやり取りができます。





##MyBatis Generator実行時の流れ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/708649/308cad98-4af6-2baa-055a-40a620b946e1.png)


①実行を行い、mysql-connector-java-8.0.11というDBコネクトをするためのライブラリによってDB接続ができます。

②対象のスキーマのTBLの構成をスキャンします

③スキャンしたTBLの構成に従って、Dao, Mapper, Dtoクラスを自動生成します。

#おわりに
上記以降の連載記事や解説記事は[こちら](http://blog.dreamhanks.com/java%e3%82%a6%e3%82%a7%e3%83%96%e3%82%a2%e3%83%97%e3%83%aa%e9%96%8b%e7%99%ba/)（DreamHanksのブログ）で閲覧することができます。