Kotlin Exposed

Kotlin Exposed

概要

Exposed は JetBrains が開発した Kotlin 向けの軽量 SQL ライブラリである。

特徴

  • 型安全な DSL (Domain Specific Language) を提供する。
  • ORM (Object-Relational Mapping) スタイルでクエリを記述できる。
  • JDBC および R2DBC ドライバをサポートする。
  • トランザクション管理やマイグレーションなど、さまざまな機能を提供する。
  • H2、MySQL、MariaDB、Oracle、PostgreSQL、SQL Server、SQLite データベースを公式にサポートする。
  • Kotlin の型を活用できるため、コンパイル時に型エラーを検出できる。
  • DSL と DAO の両方を提供しているため、用途に合う方式を選択できる。
  • コルーチン互換性: 非同期プログラミングをサポートし、ブロッキング処理を効率よく扱える。
    • Exposed は内部的に JDBC を使って DB と通信し、JDBC は従来型の blocking API であるため、DB 処理を実行するとその処理が完了するまでスレッドがブロックされる。そのため Exposed 自体は non-blocking API を提供しないが、コルーチンと組み合わせる場合はコルーチンの Dispatcher を活用して、ブロッキング処理を適切なスレッドプールで実行するように管理できる。これにより、メインスレッドをブロックせずに DB 処理を実行できる。

データベースアクセス方式

Exposed は 2 つのレベルのデータベース access を提供する。

  • SQL をマッピングした DSL (Domain Specific Language) 方式
    • SQL に似た形でクエリを記述できるため、慣れた SQL の概念を使いながら Kotlin が提供する型安全性の利点を得られる。
  • 軽量な DAO (Data Access Object) 方式
    • 従来の ORM フレームワークである Hibernate と同様に、オブジェクト指向のアプローチを提供する。
    • オブジェクト中心に DB エンティティを扱い、テーブルをクラスとして表現するため、DB レコードを直接オブジェクトにマッピングできる。
// DSL 方式
val users = UsersTable.select { UsersTable.age greater 20 }

// DAO 方式
val user = User.findById(1)

プロジェクトの要件に最も適した方式を選択できる。