CRUD con la DSL Query: insert, select, update, delete
Esegua tutte le operazioni CRUD usando la DSL di query type-safe di Exposed.
CRUD con la DSL Query: insert, select, update, delete è una lezione Kotlin Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Kotlin Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Kotlin Academy include 4 lezioni in totale.
Panoramica della Query DSL
La Query DSL di Exposed consente di scrivere operazioni SQL type-safe utilizzando funzioni Kotlin. Tutte le operazioni vengono eseguite all'interno di un blocco transaction { }. Non sono presenti stringhe magiche: i riferimenti alle colonne sono proprietà Kotlin, quindi gli errori di battitura vengono rilevati in fase di compilazione.
Inserimento
Utilizzi Table.insert { } per aggiungere una riga. La lambda riceve un InsertStatement e i valori delle colonne vengono impostati utilizzando l'operatore [column]:
transaction {
Users.insert {
it[Users.name] = "Alice"
it[Users.email] = "alice@example.com"
it[Users.age] = 30
}
}Inserimento e recupero dell'ID generato
Utilizzi insertAndGetId { } su una IdTable per recuperare la chiave primaria generata automaticamente dopo l'inserimento:
val newId: Long = transaction {
Users.insertAndGetId {
it[Users.name] = "Bob"
it[Users.email] = "bob@example.com"
}.value
}Inserimento in batch
Utilizzi batchInsert(list) { item -> ... } per inserimenti efficienti di più righe. Exposed li racchiude in un'unica istruzione preparata:
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
}
}Selezione di tutte le righe
Utilizzi Table.selectAll() per recuperare ogni riga. Iteri sul risultato come sequenza di oggetti ResultRow; acceda ai valori delle colonne tramite row[Column]:
transaction {
Users.selectAll().forEach { row ->
println("${row[Users.id]}: ${row[Users.name]}")
}
}Selezione con una clausola Where
Concateni .where { condition } (Exposed 0.46+) o .select { condition } per filtrare le righe. Le condizioni utilizzano l'overload degli operatori (eq, like, greater ecc.):
transaction {
Users.selectAll()
.where { Users.age greater 25 }
.forEach { println(it[Users.name]) }
}Selezione di colonne specifiche
Passi un elenco di colonne a .select(col1, col2) per recuperare solo quelle colonne, equivalente a 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)
}Aggiornamento
Utilizzi Table.update({ condition }) { } per modificare le righe esistenti. La lambda interna riceve un UpdateStatement; utilizzi [column] per impostare i nuovi valori:
transaction {
Users.update({ Users.id eq 1L }) {
it[Users.name] = "Alice Updated"
it[Users.age] = 31
}
}Eliminazione
Utilizzi Table.deleteWhere { condition } per rimuovere le righe che corrispondono al predicato. Restituisce il numero di righe eliminate:
transaction {
val deleted = Users.deleteWhere { Users.id eq 5L }
println("Deleted $deleted rows")
}Ordinamento e limitazione
Concateni .orderBy(column to SortOrder.ASC) e .limit(n) (con un offset opzionale) per ordinare e paginare i risultati:
transaction {
Users.selectAll()
.orderBy(Users.name to SortOrder.ASC)
.limit(10, offset = 20)
.map { it[Users.name] }
.forEach(::println)
}Aggregazioni e conteggio
Utilizzi le funzioni di aggregazione SQL standard tramite gli operatori di colonna di Exposed: Users.id.count(), Users.age.avg(), Users.age.max() ecc.:
transaction {
val total = Users.selectAll().count()
println("Total users: $total")
}Verifica rapida
Quale funzione di Exposed restituisce la chiave primaria generata automaticamente dopo l'inserimento di una riga in una IdTable?
Riepilogo: CRUD con il Query DSL
Punti chiave:
insert { }— aggiunge una riga;insertAndGetId { }— aggiunge una riga e restituisce la PKselectAll().where { }— esegue una query con filtro; concatena.orderBy()e.limit()update({ condition }) { }— modifica le righe;deleteWhere { }— rimuove le righe- Tutte le operazioni vengono eseguite all'interno di
transaction { } - I riferimenti alle colonne sono sicuri a compile-time: non servono nomi di colonne sotto forma di stringhe
Impara Kotlin con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 51
- Lezioni
- 203
Domande Frequenti
La lezione «CRUD con la DSL Query: insert, select, update, delete» è gratuita?
Sì — il testo completo di «CRUD con la DSL Query: insert, select, update, delete» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Kotlin Academy, passa a CoddyKit PRO. Il corso Kotlin Academy include 4 lezioni in totale.
Cosa imparerò in «CRUD con la DSL Query: insert, select, update, delete»?
Esegua tutte le operazioni CRUD usando la DSL di query type-safe di Exposed. Eserciti Kotlin Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Kotlin Academy?
Non è richiesta alcuna esperienza precedente. Kotlin Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «CRUD con la DSL Query: insert, select, update, delete»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Kotlin Academy?
Sì. Ogni lezione Kotlin Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Configurazione di Exposed: connessione al database e DSL delle transazioni
- Definire le tabelle con la DSL Table
- CRUD con la DSL Query: insert, select, update, delete
- DAO di Exposed: classi Entity e relazioni