Eclipse の Maven ビルドで MyBatis Generator を実行する
はじめに
MyBatis Generator は、データベースのテーブル情報をもとにSQLを実行するためのコードを自動生成するものです。モデルクラス、Mapperインターフェイスクラス、そしてMapper XMLファイルなどを自動生成してくれるため、コード作成が楽になります🐤
今回は、Eclipse の Maven ビルドで MyBatis Generator を実行する方法を解説します。
前提
- 使用するデータベースおよびテーブルは作成済み(今回は Oracle を使用しています)
- pom.xml に MyBatis Generator ライブラリの使用が記載済み
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.6</version>
</plugin>
</plugins>
</build>
generatorConfig.xml を作成する
generatorConfig.xml
は、MyBatis Generator の設定ファイルで、プロジェクトの\src\main\resources\
フォルダー配下に設置します。
下記のgeneratorConfig.xml
の例では、Oracleデータベースのテーブルからモデルとマッパーを自動生成するための構成を定義しています。
{プロジェクト}\src\main\resources\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="${user.dir}/lib/ojdbc8.jar"/>
<!-- コンテキストの設定 -->
<context id="context1" targetRuntime="MyBatis3">
<!-- プラグイン情報 -->
<plugin type="org.mybatis.generator.plugins.SerializablePlugin" />
<plugin type="com.example.mybatis.generator.plugins.CustomClassNamePlugin" />
<!-- コメント生成の設定 -->
<commentGenerator>
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!-- JDBC接続情報 -->
<jdbcConnection
driverClass="oracle.jdbc.driver.OracleDriver"
connectionURL="${db.url}"
userId="${db.user}"
password="${db.password}"
/>
<!-- 自動生成出力内容の設定 -->
<javaModelGenerator targetPackage="com.example.model.generate" targetProject="src/main/java" />
<sqlMapGenerator targetPackage="com.example.mapper.generate" targetProject="src/main/resources" />
<javaClientGenerator targetPackage="com.example.mapper.generate" targetProject="src/main/java" type="XMLMAPPER" />
<!-- 自動生成対象テーブルの設定 -->
<table
schema="MYSCHEMA"
tableName="MYTABLE_AZUNYAN"
enableInsert="true"
enableSelectByPrimaryKey="true"
... (省略)
modelType="flat">
</table>
</context>
</generatorConfiguration>
\AZUNYAN
は我が家のハチワレ猫の名前です..😽/
各要素の解説
-
classPathEntry
JARファイルのパスを指定します。 -
context
id
とtargetRuntime
を指定し、コンテキストの設定を行います。 -
plugin
使用するプラグインを指定します。ここでは、シリアライズ可能なクラスを生成するプラグインと、カスタムで作成したプラグイン(後で補足)を設定しています。 -
commentGenerator
コメントの生成に関する設定。全てのコメントを出力しない設定にしています。 -
jdbcConnection
データベース接続の設定。ドライバクラス、接続URL、ユーザーID、パスワードを設定します。 -
javaModelGenerator / sqlMapGenerator / javaClientGenerator
それぞれ、モデルクラス、SQLマップファイル(Mapper XMLファイル)、そしてMapperインターフェイスクラス(クライアントインターフェース)の生成に関する設定を行います。 -
table
自動生成対象のテーブルに関する設定。各種操作の有効/無効設定も行えます。
Maven ビルドで MyBatis Generator を実行する方法
-
[プロジェクト]を右クリック ⇒ [実行] ⇒ [実行の構成] ⇒ [Maven ビルド]をダブルクリック
-
構成を作成する。
基底ディレクトリー:${workspace_loc:/プロジェクト名}
ゴール:mybatis-generator:generate
-
[実行]をクリック
generatorConfig.xml
で指定された設定に基づいて、ファイルが生成されます。
生成されたファイルが確認できない場合は、リフレッシュや再ビルドをお試しください🙆
2度目以降の自動生成
本設定では、1度 MyBatis Generator を実行後して対象ファイルを生成後、再度 MyBatis Generator を実行すると java
ファイルは上書きされず「ファイル名.1」のように新しいファイル名で保存されるようにしています。
Eclipse のコンソールでは下記のようにメッセージが表示されます。
[WARNING] Existing file not overwritten, the generated file is saved as ・・・MyTableAzunyan.java.1
尚、xml
ファイルに関しては上書きされ、設定ファイルの内容が追記されます。プロジェクトに合わせて適切なパラメータを指定してください⚠️
自動生成されるファイル
generatorConfig.xml
の定義をもとに、対象のテーブルに対応したモデルクラス、Mapperインターフェイスクラス、そしてMapper XMLファイルの3種類が生成されます。
特定のテーブル(例:MYTABLE_AZUNYAN
) のコードを、先ほどのgeneratorConfig.xml
の定義をもとに自動生成した際のファイルの例をご紹介します。
-
モデルクラス
-
ファイル名:
MyTableAzunyan.java
-
内容: データベースの
MYTABLE_AZUNYAN
テーブルのカラムに基づいたフィールドを持つPOJOクラスが生成されます。例えば、テーブルにid
カラムやname
カラムがある場合、次のようなコードになります。
package com.example.model.generate; import java.io.Serializable; public class MyTableAzunyan implements Serializable { private Integer id; private String name; // ゲッターとセッター ... (省略) }
-
ファイル名:
-
Mapperインターフェイスクラス
-
ファイル名:
MyTableAzunyanMapper.java
-
内容:
MYTABLE_AZUNYAN
テーブルに対する操作を定義するインターフェースが生成されます。
package com.example.mapper.generate; import com.example.model.generate.MyTableAzunyan; public interface MyTableAzunyanMapper { int insert(MyTableAzunyan record); MyTableAzunyanEntity selectByPrimaryKey(Integer id); // その他のメソッド(更新や削除など) }
-
ファイル名:
-
Mapper XMLファイル
-
ファイル名:
MyTableAzunyanMapper.xml
-
内容: SQL文や結果マッピングが含まれるXMLファイルが生成されます。このファイルでは、
MYTABLE_AZUNYAN
テーブルに対するCRUD操作が定義されます。
<mapper namespace="com.example.mapper.generate.MyTableAzunyanMapper"> <resultMap id="BaseResultMap" type="com.example.persistence.generate.MyTableAzunyan"> <id column="id" property="id" /> <result column="name" property="name" /> </resultMap> <select id="selectByPrimaryKey" parameterType="map" resultMap="BaseResultMap"> SELECT id, name FROM MYSCHEMA.MYTABLE_AZUNYAN WHERE id = #{id} </select> <!-- その他のSQL文 --> </mapper>
-
ファイル名:
カスタムプラグインについて
generatorConfig.xml
でカスタムプラグインを追加していると、生成されるファイルの接尾辞を変更したり、特定のフィールドに基づいて生成物の名前を変更するなどの処理が可能です。
下記は、自動生成されるファイルの接尾辞を変更するカスタムプラグインの例になります。
package com.example.mybatis.generator.plugins;
import java.util.List;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.PluginAdapter;
/**
* MyBatis Generatorで生成するクラス名を変更するプラグイン
*/
public class CustomClassNamePlugin extends PluginAdapter {
// プラグインのバリデーション
public boolean validate(List<String> warnings) {
return true;
}
// 初期化処理
@Override
public void initialized(IntrospectedTable table) {
super.initialized(table);
String name;
// モデルのクラス名変更
name = table.getBaseRecordType();
table.setBaseRecordType(name + "Entity");
// マッパーのクラス名変更
name = table.getMyBatis3JavaMapperType();
table.setMyBatis3JavaMapperType(name.replaceAll("Mapper$", "Dao"));
// SQLマップファイル名の変更
name = table.getMyBatis3XmlMapperFileName();
table.setMyBatis3XmlMapperFileName(name.replace("Mapper.xml", "Dao.xml"));
}
}
上記のように設定し、テーブル(例:MYTABLE_AZUNYAN
)のコードを生成すると、
- MyTableAzunyan.java → MyTableAzunyanEntity.java
- MyTableAzunyanMapper.java → MyTableAzunyanDao.java
- MyTableAzunyanMapper.xml → MyTableAzunyanDao.xml
のようにファイルが生成されるイメージです🙆
以上、どなたかの参考になれば幸いです。
えみり〜でした|ωΦ)ฅ
Discussion