Kotlin Academy · レッスン

Query DSLによるCRUD:insert、select、update、delete

Exposedの型安全なQuery DSLを使って、CRUD操作をすべて実行します。

レッスン 3/413 ステップ

「Query DSLによるCRUD:insert、select、update、delete」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。

Query DSLの概要

ExposedのQuery DSLを使うと、Kotlinの関数で型安全なSQL操作を記述できます。すべての操作はtransaction { }ブロック内で実行します。マジックストリングはなく、カラム参照はKotlinのプロパティで表されるため、タイプミスをコンパイル時に検出できます。

挿入

行を追加するにはTable.insert { }を使用します。ラムダにはInsertStatementが渡され、[column]演算子を使用してカラムの値を設定します:

transaction {
    Users.insert {
        it[Users.name]  = "Alice"
        it[Users.email] = "alice@example.com"
        it[Users.age]   = 30
    }
}

挿入して生成されたIDを取得

IdTableでinsertAndGetId { }を使用すると、挿入後に自動生成された主キーを取得できます:

val newId: Long = transaction {
    Users.insertAndGetId {
        it[Users.name]  = "Bob"
        it[Users.email] = "bob@example.com"
    }.value
}

一括挿入

複数行を効率よく挿入するにはbatchInsert(list) { item -> ... }を使用します。Exposedはこれらを1つのプリペアドステートメントにまとめます:

val newUsers = listOf("Carol" to "carol@e.com", "Dave" to "dave@e.com")
transaction {
    Users.batchInsert(newUsers) { (name, email) ->
        this[Users.name]  = name
        this[Users.email] = email
    }
}

すべての行を選択

すべての行を取得するにはTable.selectAll()を使用します。結果はResultRowオブジェクトのシーケンスとして反復処理し、row[Column]でカラムの値にアクセスします:

transaction {
    Users.selectAll().forEach { row ->
        println("${row[Users.id]}: ${row[Users.name]}")
    }
}

WHERE句を指定した選択

行を絞り込むには、.where { condition }(Exposed 0.46以降)または.select { condition }をチェーンします。条件では演算子のオーバーロード(eq、like、greaterなど)を使用します:

transaction {
    Users.selectAll()
        .where { Users.age greater 25 }
        .forEach { println(it[Users.name]) }
}

特定のカラムの選択

.select(col1, col2)にカラムのリストを渡すと、それらのカラムだけを取得できます。これはSELECT col1, col2 FROM ...と同等です:

transaction {
    Users.select(Users.name, Users.email)
        .where { Users.age lessEq 30 }
        .map { it[Users.name] to it[Users.email] }
        .forEach(::println)
}

更新

既存の行を変更するにはTable.update({ condition }) { }を使用します。内側のラムダにはUpdateStatementが渡され、[column]で新しい値を設定します:

transaction {
    Users.update({ Users.id eq 1L }) {
        it[Users.name] = "Alice Updated"
        it[Users.age]  = 31
    }
}

削除

述語に一致する行を削除するにはTable.deleteWhere { condition }を使用します。削除された行数が返されます:

transaction {
    val deleted = Users.deleteWhere { Users.id eq 5L }
    println("Deleted $deleted rows")
}

並べ替えと件数制限

.orderBy(column to SortOrder.ASC)と.limit(n)(オプションのoffset付き)をチェーンして、結果の並べ替えとページネーションを行います:

transaction {
    Users.selectAll()
        .orderBy(Users.name to SortOrder.ASC)
        .limit(10, offset = 20)
        .map { it[Users.name] }
        .forEach(::println)
}

集計とカウント

Exposedのカラム演算子を使用して、標準SQLの集計関数を利用できます。例として、Users.id.count()、Users.age.avg()、Users.age.max()などがあります:

transaction {
    val total = Users.selectAll().count()
    println("Total users: $total")
}

クイックチェック

IdTableへの行の挿入後に、自動生成された主キーを返すExposedの関数はどれですか?

振り返り:Query DSLによるCRUD

主なポイント:

  • insert { } — 行を追加します。insertAndGetId { } — 行を追加してPKを取得します
  • selectAll().where { } — フィルターを使ってクエリします。.orderBy()、.limit()を連結できます
  • update({ condition }) { } — 行を変更します。deleteWhere { } — 行を削除します
  • すべての操作はtransaction { }内で実行します
  • 列参照はコンパイル時に安全です。文字列で列名を指定する必要はありません
無料で開始

AI チューターと学ぶ Kotlin — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
51
レッスン
203

よくある質問

「Query DSLによるCRUD:insert、select、update、delete」レッスンは無料ですか?

はい。「Query DSLによるCRUD:insert、select、update、delete」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。

「Query DSLによるCRUD:insert、select、update、delete」で何を学びますか?

Exposedの型安全なQuery DSLを使って、CRUD操作をすべて実行します。 ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Kotlin Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「Query DSLによるCRUD:insert、select、update、delete」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このKotlin Academyレッスンでコードを書いて実行できますか?

はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Exposedのセットアップ:データベース接続とTransaction DSL
  2. Table DSLによるテーブル定義
  3. Query DSLによるCRUD:insert、select、update、delete
  4. Exposed DAO:Entityクラスとリレーションシップ
← Kotlin Academyに戻る