Kotlin Academy · leksjon

CRUD med Query-DSL-en: insert, select, update, delete

Utfør alle CRUD-operasjoner med Exposeds typesikre Query-DSL.

Leksjon 3 av 413 trinn

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-en
  • selectAll().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
Gratis å komme i gang

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

  1. Exposed-oppsett: Databaseforbindelse og transaksjons-DSL
  2. Definere tabeller med Table-DSL-en
  3. CRUD med Query-DSL-en: insert, select, update, delete
  4. Exposed DAO: Entity-klasser og relasjoner
← Tilbake til Kotlin Academy