気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

MyBatis Generatorの設定

generatorMysqlConfigの書き方

初回設定時に必要と思った設定を以下にコメント付きで記載しておく

<?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="MyBatis3Kotlin">
    
    <!-- コメント生成の抑制 -->
    <commentGenerator>
      <property name="addRemarkComments" value="true"/> <!-- false に設定すると、コメントにテーブルやカラムの説明情報は含まれない -->
      <property name="suppressDate" value="true"/> <!-- falseだと自動生成ファイルのコメントに生成日時が記載され、generatorを実行するたびにテーブル構造に差分がなくても、必ずファイルに差分が発生 -->
    </commentGenerator>

    <!-- JDBCの設定 -->
    <jdbcConnection driverClass="org.mariadb.jdbc.Driver"
                    connectionURL="jdbc:mariadb://127.0.0.1:3306/db"
                    userId="user"
                    password="password">
      <property name="nullCatalogMeansCurrent" value="true"/> <!-- ジェネレータが MySql 情報スキーマ(sys、information_schema、performance_schema など)のテーブルまで作ろうとしてしまうので設定 -->
    </jdbcConnection>

    <javaTypeResolver>
      <!-- DATE、TIME、および TIMESTAMP フィールドに java.util.Date ではなく JSR-310 データ型の使用を強制する設定 時間系のカラムを LocalDateTime型で出力-->
      <property name="useJSR310Types" value="true"/>
    </javaTypeResolver>

    <!--  Entityの生成場所 -->
    <javaModelGenerator
      targetPackage="com.example.bulletin.board.entity.gen"
      targetProject="src/main/kotlin"/>

    <!-- ドメインオブジェクト名はデフォルトでTable名に設定されるがそれを変更する設定 -->
    <table schema="work_db" tableName="%">
      <!-- Table名 test_user、domainObjectRenamingRuleを使用 TestUserDto.java -->
      <domainObjectRenamingRule searchString="^(.*)$" replaceString="$0Dto"/>
    </table>
  </context>
</generatorConfiguration>

時刻型の型指定

DATE、TIME、および TIMESTAMP フィールドに java.util.Date ではなく、LocalDataTimeで出力する設定

    <javaTypeResolver>
      <!-- DATE、TIME、および TIMESTAMP フィールドに java.util.Date ではなく JSR-310 データ型の使用を強制する設定 時間系のカラムを LocalDateTime型で出力-->
      <property name="useJSR310Types" value="true"/>
    </javaTypeResolver>

Instantで出力する設定

任意のテーブルのcreatedという時刻型のカラム名をInstantで出力する。
ZoneはSystemDefaultになるのかは未確認

    <table schema="work_db" tableName="%">
      <columnOverride column="created" jdbcType="TIMESTAMP_WITH_TIMEZONE" javaType="java.time.Instant"/>
    </table>

useJSR310Typesの設定詳細は下記に記載あり
MyBatis Generator Core – The <javaTypeResolver> Element

MyBatis Generatorがcreated_atおよびupdated_atを生成しないよう設定

<table tableName="%" delimitIdentifiers="true" delimitAllColumns="true">
    <ignoreColumn column="created_at"/>
    <ignoreColumn column="updated_at"/>
</table>

参考URL