CRUD com a DSL de consultas: insert, select, update, delete
Realize todas as operações CRUD usando a DSL de consultas segura quanto a tipos do Exposed.
CRUD com a DSL de consultas: insert, select, update, delete é uma aula grátis de Kotlin Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Kotlin Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Kotlin Academy inclui 4 aulas no total.
Visão geral da DSL de consultas
A DSL de consultas do Exposed permite escrever operações SQL com segurança de tipos usando funções Kotlin. Todas as operações são executadas dentro de um bloco transaction { }. Não há strings mágicas — as referências às colunas são propriedades Kotlin, portanto erros de digitação são detectados em tempo de compilação.
Inserção
Use Table.insert { } para adicionar uma linha. A lambda recebe um InsertStatement, e você define os valores das colunas usando o operador [column]:
transaction {
Users.insert {
it[Users.name] = "Alice"
it[Users.email] = "alice@example.com"
it[Users.age] = 30
}
}Inserir e obter o ID gerado
Use insertAndGetId { } em uma IdTable para recuperar a chave primária gerada automaticamente após a inserção:
val newId: Long = transaction {
Users.insertAndGetId {
it[Users.name] = "Bob"
it[Users.email] = "bob@example.com"
}.value
}Inserção em lote
Use batchInsert(list) { item -> ... } para realizar inserções eficientes de várias linhas. O Exposed as encapsula em uma única instrução preparada:
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
}
}Selecionar todas as linhas
Use Table.selectAll() para buscar todas as linhas. Itere pelo resultado como uma sequência de objetos ResultRow; acesse os valores das colunas por meio de row[Column]:
transaction {
Users.selectAll().forEach { row ->
println("${row[Users.id]}: ${row[Users.name]}")
}
}Selecionar com uma cláusula WHERE
Encadeie .where { condition } (Exposed 0.46+) ou .select { condition } para filtrar as linhas. As condições usam sobrecargas de operadores (eq, like, greater etc.):
transaction {
Users.selectAll()
.where { Users.age greater 25 }
.forEach { println(it[Users.name]) }
}Selecionar colunas específicas
Passe uma lista de colunas para .select(col1, col2) a fim de recuperar somente essas colunas — o 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)
}Atualização
Use Table.update({ condition }) { } para modificar linhas existentes. A lambda interna recebe um UpdateStatement; use [column] para definir novos valores:
transaction {
Users.update({ Users.id eq 1L }) {
it[Users.name] = "Alice Updated"
it[Users.age] = 31
}
}Exclusão
Use Table.deleteWhere { condition } para remover as linhas que correspondem ao predicado. A função retorna o número de linhas excluídas:
transaction {
val deleted = Users.deleteWhere { Users.id eq 5L }
println("Deleted $deleted rows")
}Ordenação e limitação
Encadeie .orderBy(column to SortOrder.ASC) e .limit(n) (com um offset opcional) para ordenar e paginar os resultados:
transaction {
Users.selectAll()
.orderBy(Users.name to SortOrder.ASC)
.limit(10, offset = 20)
.map { it[Users.name] }
.forEach(::println)
}Agregações e contagem
Use funções de agregação SQL padrão por meio dos operadores de coluna do Exposed: Users.id.count(), Users.age.avg(), Users.age.max() etc.:
transaction {
val total = Users.selectAll().count()
println("Total users: $total")
}Verificação rápida
Qual função do Exposed retorna a chave primária gerada automaticamente após inserir uma linha em uma IdTable?
Recapitulação: CRUD com a DSL de consultas
Principais conclusões:
insert { }— adicionar uma linha;insertAndGetId { }— adicionar e obter a PKselectAll().where { }— consultar com um filtro; encadear.orderBy(),.limit()update({ condition }) { }— modificar linhas;deleteWhere { }— remover linhas- Todas as operações são executadas dentro de
transaction { } - As referências de coluna são seguras em tempo de compilação — não há nomes de colunas como texto
Perguntas Frequentes
A aula “CRUD com a DSL de consultas: insert, select, update, delete” é grátis?
Sim — o texto completo de “CRUD com a DSL de consultas: insert, select, update, delete” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Kotlin Academy, atualize para CoddyKit PRO. O curso de Kotlin Academy inclui 4 aulas no total.
O que vou aprender em “CRUD com a DSL de consultas: insert, select, update, delete”?
Realize todas as operações CRUD usando a DSL de consultas segura quanto a tipos do Exposed. Você pratica Kotlin Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Kotlin Academy?
Nenhuma experiência prévia é necessária. Kotlin Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “CRUD com a DSL de consultas: insert, select, update, delete”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Kotlin Academy?
Sim. Cada aula de Kotlin Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Configuração do Exposed: conexão com banco de dados e DSL de transações
- Definindo tabelas com a DSL Table
- CRUD com a DSL de consultas: insert, select, update, delete
- DAO do Exposed: classes de entidades e relacionamentos