0Pricing
Kotlin Academy · Lección

CRUD con el DSL de consultas: insert, select, update y delete

Realice todas las operaciones CRUD mediante el DSL de consultas seguro respecto a tipos de Exposed.

CRUD con el DSL de consultas: insert, select, update y delete es una lección gratuita de Kotlin Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Kotlin Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Kotlin Academy incluye 4 lecciones en total.

Descripción general del Query DSL

El Query DSL de Exposed permite escribir operaciones SQL con seguridad de tipos mediante funciones de Kotlin. Todas las operaciones se realizan dentro de un bloque transaction { }. No hay cadenas mágicas: las referencias a columnas son propiedades de Kotlin, por lo que los errores tipográficos se detectan en tiempo de compilación.

Inserción

Use Table.insert { } para añadir una fila. La lambda recibe un InsertStatement y debe establecer los valores de las columnas mediante el operador [column]:

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

Inserción y obtención del ID generado

Use insertAndGetId { } en una IdTable para recuperar la clave primaria generada automáticamente después de la inserción:

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

Inserción por lotes

Use batchInsert(list) { item -> ... } para realizar inserciones eficientes de varias filas. Exposed las encapsula en una única sentencia 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
    }
}

Selección de todas las filas

Use Table.selectAll() para obtener todas las filas. Itere el resultado como una secuencia de objetos ResultRow y acceda a los valores de las columnas mediante row[Column]:

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

Selección con una cláusula Where

Encadene .where { condition } (Exposed 0.46+) o .select { condition } para filtrar las filas. Las condiciones utilizan sobrecargas de operadores (eq, like, greater, etc.):

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

Selección de columnas específicas

Pase una lista de columnas a .select(col1, col2) para recuperar solo esas columnas, lo que equivale 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)
}

Actualización

Use Table.update({ condition }) { } para modificar las filas existentes. La lambda interna recibe un UpdateStatement; use [column] para establecer los nuevos valores:

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

Eliminación

Use Table.deleteWhere { condition } para eliminar las filas que coincidan con el predicado. Devuelve el número de filas eliminadas:

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

Ordenación y limitación

Encadene .orderBy(column to SortOrder.ASC) y .limit(n) (con un offset opcional) para ordenar y paginar los resultados:

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

Agregaciones y recuento

Use las funciones de agregación SQL estándar mediante los operadores de columnas de Exposed: Users.id.count(), Users.age.avg(), Users.age.max(), etc.:

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

Comprobación rápida

¿Qué función de Exposed devuelve la clave primaria generada automáticamente después de insertar una fila en una IdTable?

Repaso: CRUD con Query DSL

Puntos clave:

  • insert { } — añade una fila; insertAndGetId { } — añade una fila y obtiene la PK
  • selectAll().where { } — consulta con un filtro; encadene .orderBy(), .limit()
  • update({ condition }) { } — modifica filas; deleteWhere { } — elimina filas
  • Todas las operaciones se ejecutan dentro de transaction { }
  • Las referencias a columnas son seguras en tiempo de compilación: no se usan nombres de columnas como cadenas

Preguntas frecuentes

¿La lección «CRUD con el DSL de consultas: insert, select, update y delete» es gratis?

Sí — el texto completo de «CRUD con el DSL de consultas: insert, select, update y delete» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Kotlin Academy, actualiza a CoddyKit PRO. El curso de Kotlin Academy incluye 4 lecciones en total.

¿Qué aprenderé en «CRUD con el DSL de consultas: insert, select, update y delete»?

Realice todas las operaciones CRUD mediante el DSL de consultas seguro respecto a tipos de Exposed. Practicas Kotlin Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Kotlin Academy?

No se requiere experiencia previa. Kotlin Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «CRUD con el DSL de consultas: insert, select, update y delete»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Kotlin Academy?

Sí. Cada lección de Kotlin Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Configuración de Exposed: conexión a la base de datos y DSL de transacciones
  2. Definir tablas con el DSL Table
  3. CRUD con el DSL de consultas: insert, select, update y delete
  4. DAO de Exposed: clases Entity y relaciones
← Volver a Kotlin Academy