Kotlin サポート
Doma は、 Kotlin 1.4.0 以降をサポートしています。
ベストプラクティス
Kotlinでクラスを定義し、Domaで使用するためのおすすめのアプローチをいくつか紹介します。
エンティティクラス
プレーンクラスとして定義する
@Entityのmetamodel要素にMetamodelannotation を指定する
@Entity(metamodel = Metamodel())
class Person : AbstractPerson() {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
var id: Int = -1
var name: Name? = null
var age: Int? = -1
var address: Address? = null
@Column(name = "DEPARTMENT_ID")
var departmentId: Int = -1
@Version
var version: Int = -1
}
ドメインクラス
データクラスとして定義する
コンストラクターを 1 つだけ定義する
コンストラクターでは、名前が
valueであるプロパティを 1 つだけ定義するプロパティ定義には
valを使用する
@Domain(valueType = String::class)
data class Name(val value: String)
埋め込み可能クラス
データクラスとして定義する
コンストラクターを 1 つだけ定義する
コンストラクター内でのみプロパティを定義する
プロパティ定義には
valを使用する
@Embeddable
data class Address(val city: String, val street: String)
Dao インターフェース
SQLテンプレートを
@org.seasar.doma.Sqlで指定する
@Dao
interface PersonDao {
@Sql("""
select * from person where id = /*id*/0
""")
@Select
fun selectById(id: Int): Person
@Insert
fun insert(person: Person): Int
}
val dao: PersonDao = new PersonDaoImpl(config)
val person = Person(name = Name("John"), address = Address(city = "Tokyo", street = "Yaesu"))
val count = dao.insert(person)
Kotlin 固有の Criteria API
注釈
DAO インターフェイスよりも Kotlin 固有の Criteria API を使ってください
Doma はKotlin 専用の Criteria APIである KQueryDsl を提供します。これは クエリDSL で説明されている QueryDsl にとても似ています。KQueryDsl の最大の特徴はシンプルさです。
val queryDsl = KQueryDsl(config)
val e = Employee_()
val list = queryDsl
.from(e)
.where {
eq(e.departmentId, 2)
isNotNull(e.managerId)
or {
gt(e.salary, Salary("1000"))
lt(e.salary, Salary("2000"))
}
}
.fetch()
ここ で多くのサンプル コードを参照できます。
KQueryDsl はdoma-kotlinモジュールに含まれています。ビルドスクリプトでは doma-core の代わりに doma-kotlin を使用してください。build.gradle.kts は次のように構成できます:
dependencies {
implementation("org.seasar.doma:doma-kotlin:3.14.0")
}
コード生成
Doma CodeGen プラグイン を使用してください。このプラグインはKotlinのコード生成をサポートしています。
Gradle での kapt の使用
アノテーション プロセッサは、Kotlin で kapt コンパイラ プラグインを使用してサポートされています。
依存関係ブロックの kapt および implementation を使用して依存関係を追加します。たとえば、次のように build.gradle.kts を記述できます。
dependencies {
kapt("org.seasar.doma:doma-processor:3.14.0")
implementation("org.seasar.doma:doma-kotlin:3.14.0")
}
ビルド スクリプトを簡略化するには、Doma コンパイル プラグイン を使用することをお勧めします。
サンプルプロジェクト
kotlin-sample で多くのサンプル コードを参照できます。