Kotlin サポート
Doma は、 Kotlin 1.4.0 以降をサポートしています。
ベストプラクティス
Kotlinでクラスを定義してビルドするなど、おすすめの方法を紹介します。
エンティティクラス
プレーンクラスとして定義する
@Entity
のmetamodel
要素にMetamodel
アノテーションを指定する
@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 = ...
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、KEntityql
および KNativeSql
DSL を提供します。これらは、Criteria API で説明されている Entityql
および NativeSql
DSL と非常に似ています。 KEntityql
と KNativeSql
DSL の最大の特徴はそのシンプルさです。
たとえば、 Entityql
を使用する場合は、次のように WHERE 式でラムダパラメータを受け入れる必要があります。
val entityql = Entityql(config)
val e = Employee_()
val list = entityql
.from(e)
.where { c ->
c.eq(e.departmentId, 2)
c.isNotNull(e.managerId)
c.or {
c.gt(e.salary, Salary("1000"))
c.lt(e.salary, Salary("2000"))
}
}
.fetch()
ラムダパラメータ「c」は少し面倒です。一方、 KEntityql
を使用すると、パラメータはなくなります。
val entityql = KEntityql(config)
val e = Employee_()
val list = entityql
.from(e)
.where {
eq(e.departmentId, 2)
isNotNull(e.managerId)
or {
gt(e.salary, Salary("1000"))
lt(e.salary, Salary("2000"))
}
}
.fetch()
ここ <https://github.com/domaframework/doma-it/tree/master/kotlin/src/test/kotlin/org/seasar/doma/it/criteria>`_ で多くのサンプル コードを参照できます。
KEntityql
および KNativeSql
DSL は doma-kotlin.jar に含まれています。ビルド スクリプトでは doma-core ではなく doma-kotlin に依存する必要があることに注意してください。 build.gradle.kts は次のように記述できます。
dependencies {
implementation("org.seasar.doma:doma-kotlin:2.57.0")
}
コード生成
Doma CodeGen プラグイン を使用してください。このプラグインはKotlinのコード生成をサポートしています。
Gradle での kapt の使用
アノテーション プロセッサは、Kotlin で kapt コンパイラ プラグインを使用してサポートされています。
依存関係ブロックの kapt および implementation を使用して依存関係を追加します。たとえば、次のように build.gradle.kts を記述できます。
dependencies {
kapt("org.seasar.doma:doma-processor:2.57.0")
implementation("org.seasar.doma:doma-kotlin:2.57.0")
}
ビルド スクリプトを簡略化するには、Doma コンパイル プラグイン を使用することをお勧めします。