Query DSLによるCRUD:insert、select、update、delete
Exposedの型安全なQuery DSLを使って、CRUD操作をすべて実行します。
「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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Exposedのセットアップ:データベース接続とTransaction DSL
- Table DSLによるテーブル定義
- Query DSLによるCRUD:insert、select、update、delete
- Exposed DAO:Entityクラスとリレーションシップ