Kotlin Academy · Les

CRUD met de Query DSL: insert, select, update, delete

Voer alle CRUD-bewerkingen uit met Exposed's typesafe query-DSL.

Les 3 van 413 stappen

CRUD met de Query DSL: insert, select, update, delete is een gratis Kotlin Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Kotlin Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Kotlin Academy bevat in totaal 4 lessen.

Overzicht van de Query DSL

Met Exposed's Query DSL schrijf je typeveilige SQL-bewerkingen met Kotlin-functies. Alle bewerkingen worden uitgevoerd binnen een blok transaction { }. Er zijn geen magische tekenreeksen — kolomverwijzingen zijn Kotlin-eigenschappen, waardoor typefouten tijdens het compileren worden ontdekt.

Invoegen

Gebruik Table.insert { } om een rij toe te voegen. De lambda ontvangt een InsertStatement en je stelt kolomwaarden in met de operator [column]:

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

Invoegen en gegenereerde ID ophalen

Gebruik insertAndGetId { } op een IdTable om de automatisch gegenereerde primaire sleutel na het invoegen op te halen:

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

Batchgewijs invoegen

Gebruik batchInsert(list) { item -> ... } voor efficiënte invoegingen van meerdere rijen. Exposed verpakt deze in één voorbereide instructie:

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 rijen selecteren

Gebruik Table.selectAll() om elke rij op te halen. Loop het resultaat als een reeks ResultRow-objecten door en haal kolomwaarden op via row[Column]:

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

Selecteren met een WHERE-clausule

Koppel .where { condition } (Exposed 0.46+) of .select { condition } aan elkaar om rijen te filteren. Voorwaarden gebruiken operatoroverladingen (eq, like, greater enzovoort):

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

Specifieke kolommen selecteren

Geef een lijst met kolommen door aan .select(col1, col2) om alleen die kolommen op te halen — gelijk aan 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)
}

Bijwerken

Gebruik Table.update({ condition }) { } om bestaande rijen te wijzigen. De binnenste lambda ontvangt een UpdateStatement; gebruik [column] om nieuwe waarden in te stellen:

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

Verwijderen

Gebruik Table.deleteWhere { condition } om rijen te verwijderen die aan het predicaat voldoen. De functie geeft het aantal verwijderde rijen terug:

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

Sorteren en beperken

Koppel .orderBy(column to SortOrder.ASC) en .limit(n) (met optioneel offset) aan elkaar om resultaten te sorteren en te pagineren:

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

Aggregaties en tellingen

Gebruik standaard SQL-aggregatiefuncties via de kolomoperatoren van Exposed: Users.id.count(), Users.age.avg(), Users.age.max() enzovoort:

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

Korte controle

Welke Exposed-functie geeft de automatisch gegenereerde primaire sleutel terug na het invoegen van een rij in een IdTable?

Samenvatting: CRUD met de Query DSL

Belangrijkste punten:

  • insert { } — een rij toevoegen; insertAndGetId { } — een rij toevoegen en de PK ophalen
  • selectAll().where { } — een query met een filter uitvoeren; koppel .orderBy() en .limit()
  • update({ condition }) { } — rijen wijzigen; deleteWhere { } — rijen verwijderen
  • Alle bewerkingen worden uitgevoerd binnen transaction { }
  • Kolomverwijzingen zijn veilig tijdens het compileren — geen kolomnamen als tekenreeksen
Gratis beginnen

Leer Kotlin met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
51
Lessen
203

Veelgestelde vragen

Is de les “CRUD met de Query DSL: insert, select, update, delete” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Kotlin Academy, waaronder “CRUD met de Query DSL: insert, select, update, delete”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Kotlin Academy bevat in totaal 4 lessen.

Wat leer ik in “CRUD met de Query DSL: insert, select, update, delete”?

Voer alle CRUD-bewerkingen uit met Exposed's typesafe query-DSL. Je oefent met Kotlin Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Kotlin Academy te beginnen?

Ervaring vooraf is niet nodig. Kotlin Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “CRUD met de Query DSL: insert, select, update, delete”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Kotlin Academy?

Ja. Elke les over Kotlin Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Exposed instellen: databaseverbinding en transaction DSL
  2. Tabellen definiëren met de Table DSL
  3. CRUD met de Query DSL: insert, select, update, delete
  4. Exposed DAO: entityklassen en relaties
← Terug naar Kotlin Academy