ORM para Kotlin: comparación de Exposed, Room y Ktorm con 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

Al desarrollar aplicaciones en Kotlin, trabajar con bases de datos es una de las tareas clave. En lugar de escribir consultas SQL en bruto, los desarrolladores utilizan cada vez más ORM (Object-Relational Mapping), herramientas que automatizan la transformación de datos entre el modelo de objetos y las tablas relacionales. En este artículo, analizaremos tres ORM populares para Kotlin: Exposed, Room y Ktorm. Compararemos su arquitectura, rendimiento, facilidad de uso y proporcionaremos ejemplos prácticos de código.



1. Exposed — biblioteca DSL ligera de JetBrains

Exposed es una biblioteca desarrollada por los creadores de Kotlin. No es un ORM completo en el sentido clásico (como Hibernate), sino que ofrece dos enfoques: DSL (Domain Specific Language) para escribir consultas al estilo Kotlin y DAO (Data Access Objects) para trabajar con objetos. Exposed funciona sobre JDBC y es compatible con PostgreSQL, MySQL, H2, SQLite y otros.



Ejemplo de código con Exposed (DSL)

// Conexión a la BDDatabase.connect("jdbc:h2:mem:test", driver = "org.h2.Driver")

// Definición de tablaobject Users : Table("users") { val id = integer("id").autoIncrement() val name = varchar("name", 50) val age = integer("age") override val primaryKey = PrimaryKey(id)}

// Inserción y consultatransaction { SchemaUtils.create(Users) Users.insert { it[name] = "Alice" it[age] = 30 } Users.selectAll().forEach { println("${it[Users.name]}: ${it[Users.age]}") }}


Ventajas y desventajas de Exposed

  • Ventajas: ligero, control total sobre SQL, buena integración con Kotlin Coroutines, comunidad activa.
  • Desventajas: ausencia de generación automática de esquemas (hay que crearlos manualmente), sin soporte integrado de migraciones (requiere Flyway o Liquibase).


2. Room — ORM oficial para Android de Google

Room es una biblioteca que forma parte de Android Jetpack. Proporciona una capa de abstracción sobre SQLite y genera automáticamente código para acceder a los datos. Room utiliza anotaciones y compilación en tiempo de construcción (KAPT o KSP), lo que garantiza alto rendimiento y seguridad de tipos.



Ejemplo de código con Room

// Entidad@Entity(tableName = "users")data class User(    @PrimaryKey(autoGenerate = true) val id: Int = 0,    val name: String,    val age: Int)

// DAO@Daointerface UserDao { @Query("SELECT * FROM users") suspend fun getAll(): List<User>

@Insert suspend fun insert(user: User)}

// Base de datos@Database(entities = [User::class], version = 1)abstract class AppDatabase : RoomDatabase() { abstract fun userDao(): UserDao}


Ventajas y desventajas de Room

  • Ventajas: integración completa con Android, soporte para Flow y LiveData, generación automática de código, migraciones integradas.
  • Desventajas: vinculado a la plataforma Android (no apto para aplicaciones de servidor o escritorio), más pesado en comparación con Exposed.


3. Ktorm — ORM funcional para Kotlin

Ktorm es una biblioteca ORM moderna que ofrece un estilo funcional para trabajar con bases de datos. No utiliza anotaciones ni reflexión, sino que se basa en Kotlin DSL y extensiones. Ktorm es compatible con múltiples SGBD (MySQL, PostgreSQL, Oracle, SQLite, etc.) y puede funcionar tanto con JDBC como con dialectos SQL.



Ejemplo de código con Ktorm

// Conexión y definición de tablaval database = Database.connect("jdbc:mysql://localhost/mydb", user = "root", password = "pass")

object Users : Table<Nothing>("users") { val id = int("id").primaryKey() val name = varch

Recommendations