MyBatis Generator で Java8DateTime & Lombok を使いたい！

# 前書き

SpringBootを使用する上でMyBatisをセットで使うことが多いのですが、
MyBatisGeneratorをあわせて使うことも多いです。
ただ、MyBatisGeneratorのGetter/Setter用クラスにLombokを適用させているサンプルがあまりなかったためまとめました。

# 環境

* Mac 10.15.1 (Catalina)
* Java 8
* MyBatis Generator 1.3.7
* Maven 3系
* MySQL 8.0

MySQLは一つ前に上げた記事 [MacでDocker上に日本語環境のMySQL8.0を建てる](https://qiita.com/oono_yoshi/items/4c9c2ea554b5626ff50c) で作成したものを使用しました。
OSはWindowsでもLinuxでも問題ありません。


# 事前準備

適当なDBインスタンスにテーブルを作成する。
ここでは前述の環境の通りMySQL上にテーブルを作成したものとする。

# 参考URL

* [MyBatis Generator Lombok plugin](https://github.com/softwareloop/mybatis-generator-lombok-plugin)

以降の手順は、ほぼほぼ上記のプラグインのGitHubの手順のままです。

# 設定ファイル

pom.xml 及びMyBatisGenerator用Xmlファイルの設定例です。
SpringBootのWebを入れていますが、特に意味はありません。
pomはコメント行のあたりを参考に。

```xml:pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.2.1.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>demo</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>

        <!--  Mybatis Generator用  -->
        <mybatis.generator.configurationFile>${basedir}/src/main/resources/generatorConfig.xml</mybatis.generator.configurationFile>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.1.1</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>

    <build>
        <plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>

            <!--  Mybatis Generator用  -->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.7</version>
                <executions>
                    <execution>
                        <id>Generate MyBatis Artifacts</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <overwrite>true</overwrite>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>com.softwareloop</groupId>
                        <artifactId>mybatis-generator-lombok-plugin</artifactId>
                        <version>1.0</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>
</project>

```

```xml: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="プロジェクトディレクトリ配下に配置したDB接続用のjarファイルのパスを記載する(ex: lib/mysql-connector-java-8.0.18.jar)" />
    <context id="MySQLTables" targetRuntime="MyBatis3">
        <plugin type="com.softwareloop.mybatis.generator.plugins.LombokPlugin">
        </plugin>
        <commentGenerator>
            <property name="suppressDate" value="true" />
        </commentGenerator>
        <jdbcConnection
                driverClass="com.mysql.jdbc.Driver"
                connectionURL="jdbc:mysql://localhost:13306/testDb"
                userId="test"
                password="password" />
        <javaTypeResolver>
            <property name="useJSR310Types" value="true" />
        </javaTypeResolver>
        <javaModelGenerator
                targetPackage="Model(java)の配置先パッケージを記載する"
                targetProject="src/main/java">
            <property name="enableSubPackages" value="true" />
        </javaModelGenerator>
        <javaClientGenerator
                targetPackage="Mapper(java)の配置先パッケージを記載する"
                targetProject="src/main/java" type="XMLMAPPER">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>
        <sqlMapGenerator
                targetPackage="Mapper(xml)の配置先パッケージを記載する"
                targetProject="src/main/resources">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>
        <table tableName="%"
                enableInsert="true"
                enableSelectByPrimaryKey="true"
                enableSelectByExample="true"
                enableUpdateByPrimaryKey="true"
                enableUpdateByExample="true"
                enableDeleteByPrimaryKey="true"
                enableDeleteByExample="true"
                enableCountByExample="true"
                selectByExampleQueryId="true"
                modelType="flat">
        </table>
    </context>
</generatorConfiguration>
```

## 注意

generatorConfig.xml はMavenで確認しました。
EclipseプラグインのMyBatis Generatorだと、generatorConfig.xml内のtargetProjectのパスがMavenでの実行の場合と異なるようです。ご注意ください。