0Pricing
Kotlin Academy · Aula

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 PK
  • selectAll().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

  1. Configuração do Exposed: conexão com banco de dados e DSL de transações
  2. Definindo tabelas com a DSL Table
  3. CRUD com a DSL de consultas: insert, select, update, delete
  4. DAO do Exposed: classes de entidades e relacionamentos
← Voltar para Kotlin Academy