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 PKselectAll().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
- Configuración de Exposed: conexión a la base de datos y DSL de transacciones
- Definir tablas con el DSL Table
- CRUD con el DSL de consultas: insert, select, update y delete
- DAO de Exposed: clases Entity y relaciones