Doma CodeGen プラグイン

概要

Doma CodeGenプラグイン は Gradle プラグインです。データベースから Java、Kotlin、SQL ファイルを生成します。

AntベースのDoma-Genのドキュメントをお探しですか?

AntベースのDoma-Genのドキュメントは、 Doma-Gen GitHub リポジトリ にあります。

AntベースのDoma-Genは現在メンテナンスされていません。代わりにこのページで説明されているDoma CodeGenプラグインを使用してください。

使い方

基本的なbuild.gradle(.kts)の例は次のとおりです。

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        // specify your JDBC driver
        classpath("com.h2database:h2:1.3.175")
    }
}

plugins {
    id("java")
    id("org.domaframework.doma.codegen") version "2.0.0"
}

domaCodeGen {
    // make an arbitrary named block
    register("dev") {
        // JDBC url
        url.set("...")
        // JDBC user
        user.set("...")
        // JDBC password
        password.set("...")
        // configuration for generated entity source files
        entity {
            packageName.set("org.example.entity")
        }
        // configuration for generated DAO source files
        dao {
            packageName.set("org.example.dao")
        }
    }
}

すべてのファイルを生成するには、 domaCodeGenDevAll タスクを実行します:

$ ./gradlew domaCodeGenDevAll

Gradle タスク

Doma CodeGen プラグインは以下のタスクを提供します。

  • domaCodeGen*Name*All - すべてを生成します。

  • domaCodeGen*Name*Dao - DAO ソースファイルを生成します。

  • domaCodeGen*Name*Dto - 結果セットのメタデータを読み、DTO ソースファイルを生成します。

  • domaCodeGen*Name*Entity - エンティティソースファイルを生成します。

  • domaCodeGen*Name*Sql - SQLファイルを生成します。

  • domaCodeGen*Name*SqlTest - SQL テストソースファイルを生成します。

上記のタスク名の Name 部分は、domaCodeGen ブロックの下で定義されているブロック名に置き換えられます。 上記の使用例では、Dev 部分は dev ブロックに対応しています。

定義済みのタスク名をすべて確認するには、tasks タスクを実行します。

$ ./gradlew tasks

設定オプション

名前付きの設定

名前付きの設定は domaCodeGen ブロックの下になければなりません。設定の名前は任意です。domaCodeGen ブロックの下に複数の設定を行うことができます。

次の例では、salesaccount の2つの設定を定義します。

domaCodeGen {
    register("sales") {
        url.set("jdbc:h2:mem:sales")
    }
    register("account") {
        url.set("jdbc:h2:mem:account")
    }
}

オプション

説明

既定値

url

JDBCのURL

user

JDBCのユーザー

password

JDBCのパスワード

dataSource

データベースのデータソース

JDBCのURLから推測される

codeGenDialect

データベースのダイアレクト

JDBCのURLから推測される

catalogName

データベースのカタログ名

schemaName

データベースのスキーマ名

tableNamePattern

データベーステーブルのパターン(正規表現)

".*"

ignoredTableNamePattern

データベースの無視されるテーブルのパターン(正規表現)

".*$.*"

tableTypes

データベーステーブルのタイプ

例えば "TABLE", "VIEW" など

"TABLE"

versionColumnNamePattern

データベースのバージョンカラムのパターン (正規表現)

"VERSION([_]?NO)?"

languageType

生成コードの言語

[1] LanguageType.JAVA, LanguageType.KOTLIN

LanguageType.JAVA

languageClassResolver

言語専用クラスのクラスリゾルバ

languageType に依存します

templateEncoding

freeMarker テンプレートファイルのエンコーディング

"UTF-8"

templateDir

ユーザーがカスタマイズしたテンプレートファイルが配置されるディレクトリ

encoding

生成される Java ソースファイルのエンコーディング

"UTF-8"

sourceDir

生成された Java ソースファイルが配置されるディレクトリ

languageType に依存します

testSourceDir

生成された Java テストソースファイルが配置されるディレクトリ

languageType に依存します

resourceDir

生成された SQL ファイルが配置されるディレクトリ

"src/main/resources"

globalFactory

プラグインの動作をカスタマイズするエントリポイント

[2] The instance of GlobalFactory

entity

entity ブロックは名前付きの設定の下になければなりません:

domaCodeGen {
    register("sales") {
        entity {
            useAccessor.set(false)
        }
    }
}

オプション

説明

既定値

overwrite

生成されたエンティティファイルを上書きするかどうか

true

overwriteListener

リスナーを上書きするかどうか

false

superclassName

生成されたエンティティクラスに共通のスーパークラス

listenerSuperclassName

生成されたエンティティリスナークラスに共通のスーパークラス

packageName

生成されたエンティティクラスのパッケージ名

"example.entity"

generationType

エンティティのIDの生成タイプ

[3] GenerationType の列挙値

namingType

命名規則

[4] NamingType の列挙値

initialValue

エンティティIDの初期値

allocationSize

エンティティIDの割り当てサイズ

showCatalogName

カタログ名を表示するかどうか

false

showSchemaName

スキーマ名を表示するかどうか

false

showTableName

テーブル名を表示するかどうか

true

showColumnName

カラム名を表示するかどうか

true

showDbComment

データベースのコメントを表示するかどうか

true

useAccessor

アクセッサーを使うかどうか

true

useListener

リスナーを使うかどうか

true

useMetamodel

メタモデルを使うかどうか

true

useMappedSuperclass

マップされたスーパークラスを使用するかどうか

true

originalStatesPropertyName

@OriginalStates アノテーションが付けられるプロパティ

entityPropertyClassNamesFile

エンティティプロパティのクラスの解決に使用されるファイル

prefix

エンティティクラスの接頭辞

suffix

エンティティクラスの接尾辞

dao

dao ブロックは名前付きの設定の下になければなりません。

domaCodeGen {
    register("sales") {
        dao {
            packageName.set("org.example.sales.dao")
        }
    }
}

オプション

説明

既定値

overwrite

生成されたDAOファイルを上書きするかどうか

false

packageName

生成された DAO クラスのパッケージ名

"example.dao"

suffix

Dao クラスの接尾辞

"Dao"

configClassName

org.seasar.doma.jdbc.Config を実装したクラス名。名前は @Dao で使用されます。

false

sql

sql ブロックは名前付きの設定の下になければなりません。

domaCodeGen {
    register("sales") {
        sql {
            overwrite.set(false)
        }
    }
}

オプション

説明

既定値

overwrite

生成された SQL ファイルを上書きするかどうか

true

カスタム設定

Kotlinコードの生成

Kotlin コードを生成するには、languageType オプションに LanguageType.KOTLIN を指定します。

import org.seasar.doma.gradle.codegen.desc.LanguageType

...

domaCodeGen {
    register("dev") {
        url.set("...")
        user.set("...")
        password.set("...")
        languageType.set(LanguageType.KOTLIN)
        entity {
            packageName.set("org.example.entity")
        }
        dao {
            packageName.set("org.example.dao")
        }
    }
}

カスタムテンプレートファイルの使用

デフォルトのテンプレートファイルは、 Doma CodeGen Plugin のソースコードリポジトリ にあります。

テンプレートファイル

データモデルクラス

生成されるファイル

entity.ftl

org.seasar.doma.gradle.codege.desc.EntityDesc

エンティティのソースファイル

entityListener.ftl

org.seasar.doma.gradle.codege.desc.EntityListenerDesc

エンティティリスナーのソースファイル

dao.ftl

org.seasar.doma.gradle.codege.desc.DaoDesc

DAO のソースファイル

sqlTest.ftl

org.seasar.doma.gradle.codege.desc.SqlTestDesc

SQLのテストソースファイル

selectById.sql.ftl

org.seasar.doma.gradle.codege.desc.SqlDesc

SQL ファイル

selectByIdAndVersion.sql.ftl

org.seasar.doma.gradle.codege.desc.SqlDesc

SQL ファイル

カスタムテンプレートファイルを作成するには、ファイル名を変更せずにコピーして内容を変更します。 次に、 templateDir オプションに指定されたディレクトリに配置します。

domaCodeGen {
    register("dev") {
        url.set("...")
        user.set("...")
        password.set("...")
        // specify the directory including your custom template files
        templateDir.set(file("$projectDir/template"))
        entity {
            packageName.set("org.example.entity")
        }
        dao {
            packageName.set("org.example.dao")
        }
    }
}

The Doma CodeGen Plugin uses Apache FreeMarker to process the template files.

サンプルプロジェクト

脚注