アノテーションプロセッシング
概要
コンパイル時、Komapperは マッピング定義 内のアノテーションを処理し、 結果をメタモデルのソースコードとして生成します。 アノテーションの処理とコードの生成には Kotlin Symbol Processing API (KSP)を利用します。
KSPを実行するためには、Gradleビルドスクリプトを次のように記述します。
plugins {
id("com.google.devtools.ksp") version "2.0.21-1.0.28"
kotlin("jvm") version "2.0.21"
}
dependencies {
val komapperVersion = "4.0.0"
ksp("org.komapper:komapper-processor:$komapperVersion")
}
komapper-processor
モジュールにはKSPのアノテーションプロセッサが含まれます。
上記設定後、Gradleのbuildタスクを実行するとbuild/generated/ksp/main/kotlin
ディレクトリ以下にコードが生成されます。
オプション
オプションによりアノテーションプロセッサの挙動を変更できます。 利用可能なオプションは以下の通りです。
- komapper.prefix
- komapper.suffix
- komapper.enumStrategy
- komapper.namingStrategy
- komapper.metaObject
- komapper.alwaysQuote
- komapper.enableEntityMetamodelListing
- komapper.enableEntityStoreContext
- komapper.enableEntityProjection
オプションを指定するにはGradleのビルドスクリプトで次のように記述します。
ksp {
arg("komapper.prefix", "")
arg("komapper.suffix", "Metamodel")
arg("komapper.enumStrategy", "ordinal")
arg("komapper.namingStrategy", "UPPER_SNAKE_CASE")
arg("komapper.metaObject", "example.Metamodels")
arg("komapper.alwaysQuote", "true")
arg("komapper.enableEntityMetamodelListing", "true")
arg("komapper.enableEntityStoreContext", "true")
arg("komapper.enableEntityProjection", "true")
}
komapper.prefix
生成されるメタモデルクラスのプレフィックスです。
デフォルト値は_
(アンダースコア)です。
komapper.suffix
生成されるメタモデルクラスのサフィックスです。 デフォルト値は空文字です。
komapper.enumStrategy
Enum型のプロパティをデータベースのカラムどうマッピングするかの戦略です。
値にはname
またはordinal
のいずれかを選択できます。
デフォルト値はname
です。
なお、@KomapperEnum
による指定はこの戦略よりも優先されます。
komapper.enumStrategy
オプションに指定可能な値の定義は次の通りです。
- name
- Enumクラスの
name
プロパティを文字列型のカラムにマッピングする。 - ordinal
- Enumクラスの
ordinal
プロパティを整数型のカラムにマッピングする。 - type
- Enumクラスをenum型のカラムにマッピングする。 Enumクラスに対応する ユーザー定義のデータ型 が必要であることに注意してほしい。
komapper.namingStrategy
Kotlinのエンティクラスとプロパティからデータベースのテーブルとカラムの名前をどう解決するのかの戦略です。
値にはimplicit
、lower_snake_case
、UPPER_SNAKE_CASE
のいずれかを選択できます。
デフォルト値はlower_snake_case
です。
解決されたデータベースのテーブルとカラムの名前は生成されるメタモデルのコードの中に含まれます。
なお、@KomapperTable
や@KomapperColumn
で名前が指定される場合この戦略で決定される名前よりも優先されます。
komapper.namingStrategy
オプションに指定可能な値の定義は次の通りです。
- implicit
- エンティティクラスやプロパティの名前をそのままテーブルやカラムの名前とする。
- lower_snake_case
- エンティティクラスやプロパティの名前をキャメルケースからスネークケースに変換した上で全て小文字にしテーブルやカラムの名前とする。
- UPPER_SNAKE_CASE
- エンティティクラスやプロパティの名前をキャメルケースからスネークケースに変換した上で全て大文字にしテーブルやカラムの名前とする。
komapper.metaObject
メタモデルのインスタンスを拡張プロパティとして提供するobjectを指定します。
デフォルト値はorg.komapper.core.dsl.Meta
です。
komapper.alwaysQuote
SQL文の中でテーブル名やカラム名をクォートするかどうかです。
デフォルト値はfalse
です。
komapper.enableEntityMetamodelListing
エンティティメタモデルの一覧を取得できるようにするかどうかです。
デフォルト値はfalse
です。
true
を設定すると、次のような方法で一覧を取得できます。
val metamodels: List<EntityMetamodel<*, *, *>> = Meta.all()
val metamodels: List<EntityMetamodel<*, *, *>> = EntityMetamodels.list(Meta)
komapper.enableEntityStoreContext
EntityStore
のコンテキストを有効にするかどうかです。
デフォルト値はfalse
です。
true
を設定すると、context receiver
を利用するAssociation APIのコードを生成します。
context receiverを使った走査のコード も参照ください。
Note
このオプションを有効にするには、 合わせて以下のコードをGradleのビルドスクリプトに追加してください。
tasks {
withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
kotlinOptions.freeCompilerArgs += listOf("-Xcontext-receivers")
}
}
komapper.enableEntityProjection
クエリの結果をエンティティへ射影することを有効にするかどうかです。
有効にすると全てのエンティティクラスについてSelectQuery
とTemplateSelectQueryBuilder
の拡張関数が生成されます。
デフォルト値はfalse
です。
拡張関数の名前はselectAsAddress
のようにselectAs + エンティティクラスの単純名
となります。
拡張関数の名前を変更したり、特定のエンティティクラスについてのみ射影を有効にしたい場合は@KomapperProjection
を使ってください。