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")
}
}
}
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
dev {
// JDBC url
url = '...'
// JDBC user
user = '...'
// JDBC password
password = '...'
// configuration for generated entity source files
entity {
packageName = 'org.example.entity'
}
// configuration for generated DAO source files
dao {
packageName = '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
ブロックの下に複数の設定を行うことができます。
次の例では、sales
と account
の2つの設定を定義します。
domaCodeGen {
register("sales") {
url.set("jdbc:h2:mem:sales")
}
register("account") {
url.set("jdbc:h2:mem:account")
}
}
domaCodeGen {
sales {
url = "jdbc:h2:mem:sales"
}
account {
url = "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)
}
}
}
domaCodeGen {
sales {
entity {
useAccessor = 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")
}
}
}
domaCodeGen {
sales {
dao {
packageName = 'org.example.sales.dao'
}
}
}
オプション |
説明 |
値 |
既定値 |
---|---|---|---|
overwrite |
生成されたDAOファイルを上書きするかどうか |
|
|
packageName |
生成された DAO クラスのパッケージ名 |
"example.dao" |
|
suffix |
Dao クラスの接尾辞 |
"Dao" |
|
configClassName |
|
|
sql
sql
ブロックは名前付きの設定の下になければなりません。
domaCodeGen {
register("sales") {
sql {
overwrite.set(false)
}
}
}
domaCodeGen {
sales {
sql {
overwrite = false
}
}
}
オプション |
説明 |
値 |
既定値 |
---|---|---|---|
overwrite |
生成された SQL ファイルを上書きするかどうか |
|
カスタム設定
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")
}
}
}
import org.seasar.doma.gradle.codegen.desc.LanguageType
...
domaCodeGen {
dev {
url = '...'
user = '...'
password = '...'
languageType = LanguageType.KOTLIN
entity {
packageName = 'org.example.entity'
}
dao {
packageName = '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")
}
}
}
domaCodeGen {
dev {
url = '...'
user = '...'
password = '...'
// specify the directory including your custom template files
templateDir = file("$projectDir/template")
entity {
packageName = 'org.example.entity'
}
dao {
packageName = 'org.example.dao'
}
}
}
The Doma CodeGen Plugin uses Apache FreeMarker to process the template files.