ORM para Kotlin: Exposed vs Ktor vs Ktorm — comparación y ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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

Recommendations