ORM para Kotlin: comparación y ejemplos
Kotlin es un lenguaje moderno que se utiliza activamente para desarrollar aplicaciones backend, aplicaciones Android e incluso proyectos multiplataforma. Para trabajar con bases de datos, los desarrolladores suelen elegir ORM (Object-Relational Mapping) para evitar escribir consultas SQL en bruto y acelerar el desarrollo. En este artículo, analizaremos tres herramientas ORM populares para Kotlin: Exposed, Ktor (en conjunto con Exposed) y Ktorm. Compararemos su sintaxis, rendimiento y facilidad de uso con ejemplos prácticos.
1. Exposed — el ORM oficial de JetBrains
Exposed es una biblioteca ORM desarrollada por JetBrains específicamente para Kotlin. Admite dos enfoques: DSL (Domain Specific Language) y DAO (Data Access Objects). Exposed se integra perfectamente con el framework Ktor, pero también se puede usar de forma independiente.
Características clave:
- Sintaxis DSL ligera e intuitiva.
- Soporte para transacciones, migraciones y conexiones.
- Trabaja con PostgreSQL, MySQL, H2, SQLite y otras bases de datos.
- Comunidad activa y documentación oficial.
Ejemplo de código (enfoque DSL):
import org.jetbrains.exposed.sql.*import org.jetbrains.exposed.sql.transactions.transaction
// Definición de tablaobject Users : Table() { val id = integer("id").autoIncrement() val name = varchar("name", 50) val age = integer("age")
override val primaryKey = PrimaryKey(id)}
// Ejemplo de consultafun main() { Database.connect("jdbc:h2:mem:test", driver = "org.h2.Driver")
transaction { SchemaUtils.create(Users)
// Inserción Users.insert { it[name] = "Alice" it[age] = 30 }
// Selección val result = Users.selectAll().where { Users.age greater 25 } result.forEach { println("${it[Users.name]}: ${it[Users.age]}") } }}2. Ktor + Exposed — combinación para aplicaciones web
Ktor es un framework web asíncrono para Kotlin. Aunque Ktor no proporciona un ORM integrado, funciona muy bien junto con Exposed. Esta combinación permite crear API REST con una cantidad mínima de código.
Ejemplo de integración de Ktor con Exposed:
import io.ktor.server.application.*import io.ktor.server.routing.*import io.ktor.server.response.*import org.jetbrains.exposed.sql.*import org.jetbrains.exposed.sql.transactions.transaction
fun Application.module() { Database.connect("jdbc:h2:mem:test", driver = "org.h2.Driver")
routing { get("/users") { val users = transaction { Users.selectAll().map { mapOf("name" to it[Users.name], "age" to it[Users.age]) } } call.respond(users) } }}Este enfoque es adecuado para microservicios y proyectos pequeños donde la simplicidad y la velocidad de desarrollo son importantes.
3. Ktorm — ORM ligero y de alto rendimiento
Ktorm es otro ORM popular para Kotlin, centrado en el rendimiento y el minimalismo. Utiliza programación funcional y admite tanto DSL como sintaxis similar a SQL.
Características clave:
- Alto rendimiento gracias a la ausencia de reflexión.
- Soporte para extensiones (por ejemplo, para campos JSON).
- Configuración simple y dependencias mínimas.
- Trabaja con la mayoría de los DBMS populares.
Ejemplo de código Ktorm:
import me.liuwj.ktorm.database.Databaseimport me.liuwj.ktorm.dsl.*import me.liuwj.ktorm.entity.*
// Definición de entidadinterface User : Entity { compan También en la biblioteca
Generación de códigos QR en Java: biblioteca ZXing (guía detallada)
Validación de datos en Java: revisión de bibliotecas y enfoques
Procesamiento de Markdown en C# (.NET): bibliotecas y herramientas
Trabajo con imágenes en PHP: resize, crop y optimización con GD e Imagick
Tokens JWT en C# (.NET): guía completa con ejemplos