CRUD mit der Query-DSL: insert, select, update, delete
Führen Sie alle CRUD-Operationen mit der typsicheren Query-DSL von Exposed aus.
CRUD mit der Query-DSL: insert, select, update, delete ist eine kostenlose Kotlin Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Kotlin Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.
Überblick über die Query DSL
Mit der Query DSL von Exposed können Sie typsichere SQL-Operationen mithilfe von Kotlin-Funktionen schreiben. Alle Operationen werden innerhalb eines transaction { }-Blocks ausgeführt. Es gibt keine Magic Strings – Spaltenreferenzen sind Kotlin-Eigenschaften, sodass Tippfehler bereits zur Kompilierzeit erkannt werden.
Einfügen
Verwenden Sie Table.insert { }, um eine Zeile hinzuzufügen. Die Lambda-Funktion erhält ein InsertStatement, und Sie setzen die Spaltenwerte mit dem Operator [column]:
transaction {
Users.insert {
it[Users.name] = "Alice"
it[Users.email] = "alice@example.com"
it[Users.age] = 30
}
}Einfügen und generierte ID abrufen
Verwenden Sie insertAndGetId { } für eine IdTable, um nach dem Einfügen den automatisch generierten Primärschlüssel abzurufen:
val newId: Long = transaction {
Users.insertAndGetId {
it[Users.name] = "Bob"
it[Users.email] = "bob@example.com"
}.value
}Stapelweises Einfügen
Verwenden Sie batchInsert(list) { item -> ... } für effiziente Einfügevorgänge mehrerer Zeilen. Exposed fasst sie in einer einzigen vorbereiteten Anweisung zusammen:
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
}
}Alle Zeilen auswählen
Verwenden Sie Table.selectAll(), um jede Zeile abzurufen. Durchlaufen Sie das Ergebnis als Sequenz von ResultRow-Objekten und greifen Sie über row[Column] auf Spaltenwerte zu:
transaction {
Users.selectAll().forEach { row ->
println("${row[Users.id]}: ${row[Users.name]}")
}
}Mit einer Where-Klausel auswählen
Verketten Sie .where { condition } (Exposed 0.46+) oder .select { condition }, um Zeilen zu filtern. Bedingungen verwenden überladene Operatoren (eq, like, greater usw.):
transaction {
Users.selectAll()
.where { Users.age greater 25 }
.forEach { println(it[Users.name]) }
}Bestimmte Spalten auswählen
Übergeben Sie eine Liste von Spalten an .select(col1, col2), um nur diese Spalten abzurufen – gleichbedeutend mit 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)
}Aktualisieren
Verwenden Sie Table.update({ condition }) { }, um vorhandene Zeilen zu ändern. Die innere Lambda-Funktion erhält ein UpdateStatement; verwenden Sie [column], um neue Werte festzulegen:
transaction {
Users.update({ Users.id eq 1L }) {
it[Users.name] = "Alice Updated"
it[Users.age] = 31
}
}Löschen
Verwenden Sie Table.deleteWhere { condition }, um Zeilen zu entfernen, die das Prädikat erfüllen. Die Funktion gibt die Anzahl der gelöschten Zeilen zurück:
transaction {
val deleted = Users.deleteWhere { Users.id eq 5L }
println("Deleted $deleted rows")
}Sortieren und begrenzen
Verketten Sie .orderBy(column to SortOrder.ASC) und .limit(n) (mit optionalem offset), um Ergebnisse zu sortieren und zu paginieren:
transaction {
Users.selectAll()
.orderBy(Users.name to SortOrder.ASC)
.limit(10, offset = 20)
.map { it[Users.name] }
.forEach(::println)
}Aggregationen und Anzahl
Verwenden Sie Standard-SQL-Aggregatfunktionen über die Spaltenoperatoren von Exposed: Users.id.count(), Users.age.avg(), Users.age.max() und so weiter:
transaction {
val total = Users.selectAll().count()
println("Total users: $total")
}Kurzer Check
Welche Exposed-Funktion gibt nach dem Einfügen einer Zeile in eine IdTable den automatisch generierten Primärschlüssel zurück?
Zusammenfassung: CRUD mit der Query DSL
Wichtige Erkenntnisse:
insert { }— eine Zeile hinzufügen;insertAndGetId { }— eine Zeile hinzufügen und den PK abrufenselectAll().where { }— mit einem Filter abfragen;.orderBy()und.limit()verkettenupdate({ condition }) { }— Zeilen ändern;deleteWhere { }— Zeilen entfernen- Alle Operationen werden innerhalb von
transaction { }ausgeführt - Spaltenreferenzen sind zur Compile-Zeit typsicher — keine Spaltennamen als Zeichenfolgen
Häufig gestellte Fragen
Ist die Lektion „CRUD mit der Query-DSL: insert, select, update, delete“ kostenlos?
Ja — der vollständige Text von „CRUD mit der Query-DSL: insert, select, update, delete“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Kotlin Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „CRUD mit der Query-DSL: insert, select, update, delete“?
Führen Sie alle CRUD-Operationen mit der typsicheren Query-DSL von Exposed aus. Du übst Kotlin Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Kotlin Academy zu starten?
Keine Vorkenntnisse erforderlich. Kotlin Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „CRUD mit der Query-DSL: insert, select, update, delete“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Kotlin Academy-Lektion Code schreiben und ausführen?
Ja. Jede Kotlin Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Exposed einrichten: Datenbankverbindung und Transaction-DSL
- Tabellen mit der Table-DSL definieren
- CRUD mit der Query-DSL: insert, select, update, delete
- Exposed DAO: Entity-Klassen und Beziehungen