CRUD med Query-DSL-en: insert, select, update, delete
Utfør alle CRUD-operasjoner med Exposeds typesikre Query-DSL.
CRUD med Query-DSL-en: insert, select, update, delete er en gratis leksjon i Kotlin Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Kotlin Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Kotlin Academy inneholder totalt 4 leksjoner.
Oversikt over Query DSL
Exposeds Query DSL lar Dem skrive typesikre SQL-operasjoner ved hjelp av Kotlin-funksjoner. Alle operasjoner utføres inne i en transaction { }-blokk. Det finnes ingen magiske strenger — kolonnereferanser er Kotlin-egenskaper, så skrivefeil oppdages ved kompilering:
Insert
Bruk Table.insert { } for å legge til en rad. Lambda-uttrykket mottar en InsertStatement, og De angir kolonneverdier ved hjelp av operatoren [column]:
transaction {
Users.insert {
it[Users.name] = "Alice"
it[Users.email] = "alice@example.com"
it[Users.age] = 30
}
}Sette inn og hente generert ID
Bruk insertAndGetId { } på en IdTable for å hente den automatisk genererte primærnøkkelen etter innsettingen:
val newId: Long = transaction {
Users.insertAndGetId {
it[Users.name] = "Bob"
it[Users.email] = "bob@example.com"
}.value
}Batchinnsetting
Bruk batchInsert(list) { item -> ... } for effektive innsettinger av flere rader. Exposed pakker dem inn i én forberedt setning:
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
}
}Velge alle rader
Bruk Table.selectAll() for å hente hver rad. Iterer gjennom resultatet som en sekvens av ResultRow-objekter, og få tilgang til kolonneverdier via row[Column]:
transaction {
Users.selectAll().forEach { row ->
println("${row[Users.id]}: ${row[Users.name]}")
}
}Velge med en Where-betingelse
Kjede sammen .where { condition } (Exposed 0.46+) eller .select { condition } for å filtrere rader. Betingelser bruker operatoroverbelastninger (eq, like, greater osv.):
transaction {
Users.selectAll()
.where { Users.age greater 25 }
.forEach { println(it[Users.name]) }
}Velge bestemte kolonner
Send en liste med kolonner til .select(col1, col2) for å hente bare disse kolonnene — tilsvarende 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)
}Update
Bruk Table.update({ condition }) { } for å endre eksisterende rader. Det indre lambda-uttrykket mottar en UpdateStatement; bruk [column] for å angi nye verdier:
transaction {
Users.update({ Users.id eq 1L }) {
it[Users.name] = "Alice Updated"
it[Users.age] = 31
}
}Delete
Bruk Table.deleteWhere { condition } for å fjerne rader som samsvarer med predikatet. Funksjonen returnerer antallet slettede rader:
transaction {
val deleted = Users.deleteWhere { Users.id eq 5L }
println("Deleted $deleted rows")
}Sortering og begrensning
Kjede sammen .orderBy(column to SortOrder.ASC) og .limit(n) (med valgfri offset) for å sortere og paginere resultater:
transaction {
Users.selectAll()
.orderBy(Users.name to SortOrder.ASC)
.limit(10, offset = 20)
.map { it[Users.name] }
.forEach(::println)
}Aggregeringer og antall
Bruk standardfunksjoner for SQL-aggregering via Exposeds kolonneoperatorer: Users.id.count(), Users.age.avg(), Users.age.max() osv.:
transaction {
val total = Users.selectAll().count()
println("Total users: $total")
}Hurtigsjekk
Hvilken Exposed-funksjon returnerer den automatisk genererte primærnøkkelen etter at en rad er satt inn i en IdTable?
Oppsummering: CRUD med Query DSL
Viktige punkter:
insert { }— legg til en rad;insertAndGetId { }— legg til en rad og hent PK-enselectAll().where { }— spør med et filter; lenk sammen med.orderBy()og.limit()update({ condition }) { }— endre rader;deleteWhere { }— fjern rader- Alle operasjoner kjører i
transaction { } - Kolonnereferanser er typesikre ved kompilering — ingen kolonnenavn som strenger
Lær deg Kotlin med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 51
- Leksjoner
- 203
Ofte stilte spørsmål
Er leksjonen «CRUD med Query-DSL-en: insert, select, update, delete» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Kotlin Academy, inkludert «CRUD med Query-DSL-en: insert, select, update, delete», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Kotlin Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «CRUD med Query-DSL-en: insert, select, update, delete»?
Utfør alle CRUD-operasjoner med Exposeds typesikre Query-DSL. Du øver på Kotlin Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Kotlin Academy?
Ingen tidligere erfaring er nødvendig. Kotlin Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.
Hvor lang tid tar leksjonen «CRUD med Query-DSL-en: insert, select, update, delete»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Kotlin Academy-leksjonen?
Ja. Alle Kotlin Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Exposed-oppsett: Databaseforbindelse og transaksjons-DSL
- Definere tabeller med Table-DSL-en
- CRUD med Query-DSL-en: insert, select, update, delete
- Exposed DAO: Entity-klasser og relasjoner