アノテーションプロセッシング

概要

コンパイル時、Komapperは マッピング定義 内のアノテーションを処理し、 結果をメタモデルのソースコードとして生成します。 アノテーションの処理とコードの生成には Kotlin Symbol Processing API (KSP)を利用します。

KSPを実行するためには、Gradleビルドスクリプトを次のように記述します。

plugins {
  id("com.google.devtools.ksp") version "1.7.10-1.0.6"
  kotlin("jvm") version "1.7.10"
}

dependencies {
  val komapperVersion = "1.4.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

オプションを指定するにはGradleのビルドスクリプトで次のように記述します。

ksp {
  arg("komapper.prefix", "")
  arg("komapper.suffix", "Metamodel")
  arg("komapper.enumStrategy", "ordinal")
  arg("komapper.namingStrategy", "UPPER_SNAKE_CASE")
  arg("komapper.metaObject", "example.Metamodels")
}

komapper.prefix

生成されるメタモデルクラスのプレフィックスです。 デフォルト値は_(アンダースコア)です。

komapper.suffix

生成されるメタモデルクラスのサフィックスです。 デフォルト値は空文字です。

komapper.enumStrategy

Enum型のプロパティをデータベースのカラムどうマッピングするかの戦略です。 値にはnameまたはordinalのいずれかを選択できます。 デフォルト値はnameです。 なお、@KomapperEnumによる指定はこの戦略よりも優先されます。

komapper.enumStrategyオプションに指定可能な値の定義は次の通りです。

name
Enumクラスのnameプロパティを文字列型のカラムにマッピングする。
ordinal
Enumクラスのordinalプロパティを整数型のカラムにマッピングする。

komapper.namingStrategy

Kotlinのエンティクラスとプロパティからデータベースのテーブルとカラムの名前をどう解決するのかの戦略です。 値にはimplicitlower_snake_caseUPPER_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です。

最終更新 September 17, 2022: Add the 'komapper.alwaysQuote' option (3c65474)