MavenでMyBatis Generatorを使う

# 環境
- JDK 21
- Maven 3.9.7
- MyBatis Generator 1.4.2
- PostgreSQL 15.3
- Spring Boot 3.3.1

# 公式ドキュメント
https://mybatis.org/generator/running/runningWithMaven.html

# pom.xmlの設定
今回はSpring Bootを使っていますが、MyBatisさえ入っていれば大丈夫なはずです。

```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">
    ...
    <dependencies>
        ...
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>3.0.3</version>
        </dependency>
        ...
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!-- これ！！！！！！ -->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.4.2</version>
                <configuration>
                    <!-- 生成時に既存コードを上書きしたい場合はtrueに設定 -->
                    <overwrite>true</overwrite>
                </configuration>
                <dependencies>
                    <!-- これがないと生成時にDB接続できない -->
                    <dependency>
                        <groupId>org.postgresql</groupId>
                        <artifactId>postgresql</artifactId>
                        <version>42.7.3</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>
</project>
```

[公式ドキュメント](https://mybatis.org/generator/running/runningWithMaven.html)には`<executions>`の設定が書かれているけど、これを書いちゃうと`mvn package`でもコード生成が実行されちゃうので、書かないほうがいいです。

# generatorConfig.xmlの作成
```xml: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>
    <context id="context1" targetRuntime="MyBatis3Simple">
        <!--  equals()メソッドおよびhashCode()メソッドを作成する -->
        <plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"/>
        <!--  toString()メソッドを作成する -->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
        <!-- エンティティクラスにwithXxx()メソッドを作成する -->
        <plugin type="org.mybatis.generator.plugins.FluentBuilderMethodsPlugin"/>
        <!-- エンティティクラスにSerializableを実装する -->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
        <!-- Mapperインタフェースに@Mapperアノテーションを付加する -->
        <plugin type="org.mybatis.generator.plugins.MapperAnnotationPlugin"/>

        <!-- コメント生成の抑制 -->
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

        <!-- JDBC接続情報 -->
        <jdbcConnection driverClass="org.postgresql.Driver"
                        connectionURL="jdbc:postgresql://localhost:5432/sample"
                        userId="sample"
                        password="sample">
        </jdbcConnection>

        <!-- エンティティ作成に関する設定 -->
        <javaModelGenerator targetPackage="com.example.entity" targetProject="src/main/java">
            <property name="enableSubPackages" value="false"/>  <!-- trueにするとスキーマ名のサブパッケージができる。スキーマ名が"public"だとJavaの予約語なのでコンパイルエラーになる。 -->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <!--
        Mapperインタフェース作成に関する設定
        type="ANNOTATEDMAPPER"でアノテーションを使ったMapperが作成される
        type="XMLMAPPER"でXMLを使ったMapperが作成される（<sqlMapGenerator>要素が別途必要）
        -->
        <javaClientGenerator type="ANNOTATEDMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java">
            <property name="enableSubPackages" value="false"/>  <!-- trueにするとスキーマ名のサブパッケージができる。スキーマ名が"public"だとJavaの予約語なのでコンパイルエラーになる。 -->
        </javaClientGenerator>

        <!--
        "%"にすると全テーブルが出力される
        https://mybatis.org/generator/configreference/table.html#required-attributes
        -->
        <table schema="public" tableName="%">
        </table>
    </context>
</generatorConfiguration>
```

`<plugin>`一覧は[こちら](https://mybatis.org/generator/reference/plugins.html)。

# 生成実行
```shell
mvn mybatis-generator:generate
```