JOOQというO/Rマッパーを知ったので調べた
JOOQはSQLクエリを型安全に生成・実行するためのライブラリ
JOOQはもともとJavaのO/RマッパーだがSQLの構文をそのまま活かしつつ、Kotlinコードで書けるようにしている
R2DBCによるノンブロッキングI/Oに対応しているとのこと
R2DBC(Reactive Relational Database Connectivity)とは、非同期でリアクティブプログラミングのために設計された関係データベースへのアクセス仕様のこと
JOOQを使うことで、Kotlinの型システムを活用しながら、コンパイル時にSQLのエラーチェックが可能になる
基本的な使い方としては、データベーススキーマから生成されたコードを用いて、クエリビルダーのようにSQLを構築できる
例えば、データベースのテーブルやフィールドを直接参照して、クエリを組み立てることができるため、クエリの構築が直感的になる
簡単な例:
val result = context .select(BOOK.TITLE, AUTHOR.NAME) .from(BOOK) .join(AUTHOR).on(BOOK.AUTHOR_ID.eq(AUTHOR.ID)) .where(BOOK.PUBLISHED_YEAR.eq(2023)) .fetch()
上記のように、テーブルやカラムを直接コードで扱うことで、SQL文を型安全に構築できる
クエリの結果は通常、データベースの行を表すオブジェクトやリストとして取得可能
また、DSLを使うことで、複雑なクエリも簡潔に書けるのが特徴