概要
ExposedはKotlinで使用できるO/Rマッパーです。ざっくりどんな雰囲気かというのは、ExposedのDSL/DAOサンプル集を参照頂ければと思います。
今回は1行だけSelectしたい場合どうするのか、というのをメモ書きします。例えば、IDとか指定してSelectし返ってくるのが1行か0行かという場合、どう書くのが良いかということですね。(listとして取得し、行数を判定しても良いと言えば良いのですが)
対応
どう対応すれば良いかは、stackoverflowの記事Kotlin Exposed SELECT single recordが参考になります。
対応としてまずは、limit(1)
で取得するレコードを1行に限定した上で、single()
メソッドを呼び出せば実現できそうです。
ただ、single()
はレコードがなかった場合exceptionが発生するので、【Kotlin】find, firstOrNull, singleOrNullの違いは?調べてみました!の記事に紹介されている、firstOrNull
やsingleOrNull
を使った方が良さそうですね。
実装サンプル
DSLでの実装を前提としています。
transaction {
// 作成したユーザテーブルにidの値でSelectをかける想定
Users.select { Users.id.eq(id) }
.limit(1).firstOrNull()?.also {
// 取得できた場合の処理をここに書く
} ?: run {
// 取得できなかった場合の処理をここに書く
}
}