ORM para Kotlin: comparação entre Exposed, Room e Ktorm com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

ORM para Kotlin: comparação e exemplos

Ao desenvolver aplicações em Kotlin, trabalhar com bancos de dados é uma das tarefas principais. Em vez de escrever consultas SQL brutas, os desenvolvedores estão cada vez mais usando ORM (Object-Relational Mapping) — ferramentas que automatizam a conversão de dados entre o modelo de objetos e as tabelas relacionais. Neste artigo, veremos três ORMs populares para Kotlin: Exposed, Room e Ktorm. Compararemos sua arquitetura, desempenho, facilidade de uso e forneceremos exemplos práticos de código.



1. Exposed — biblioteca DSL leve da JetBrains

Exposed é uma biblioteca desenvolvida pelos criadores do Kotlin. Ela não é um ORM completo no sentido clássico (como Hibernate), mas oferece duas abordagens: DSL (Domain Specific Language) para escrever consultas no estilo Kotlin e DAO (Data Access Objects) para trabalhar com objetos. O Exposed funciona sobre JDBC e suporta PostgreSQL, MySQL, H2, SQLite e outros.



Exemplo de código com Exposed (DSL)

// Conexão ao banco de dadosDatabase.connect("jdbc:h2:mem:test", driver = "org.h2.Driver")

// Definição da tabelaobject Users : Table("users") { val id = integer("id").autoIncrement() val name = varchar("name", 50) val age = integer("age") override val primaryKey = PrimaryKey(id)}

// Inserção e consultatransaction { SchemaUtils.create(Users) Users.insert { it[name] = "Alice" it[age] = 30 } Users.selectAll().forEach { println("${it[Users.name]}: ${it[Users.age]}") }}


Prós e contras do Exposed

  • Prós: leve, controle total sobre SQL, boa integração com Kotlin Coroutines, comunidade ativa.
  • Contras: ausência de geração automática de esquema (precisa criar manualmente), sem suporte nativo a migrações (requer Flyway ou Liquibase).


2. Room — ORM oficial para Android do Google

Room é uma biblioteca que faz parte do Android Jetpack. Ela fornece uma camada de abstração sobre o SQLite e gera automaticamente o código para acesso aos dados. O Room usa anotações e compilação em tempo de build (KAPT ou KSP), garantindo alta performance e segurança de tipos.



Exemplo de código com Room

// Entidade@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)}

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


Prós e contras do Room

  • Prós: integração total com Android, suporte a Flow e LiveData, geração automática de código, migrações integradas.
  • Contras: vinculado à plataforma Android (não adequado para aplicações servidoras ou desktop), mais pesado em comparação ao Exposed.


3. Ktorm — ORM funcional para Kotlin

Ktorm é uma biblioteca ORM moderna que oferece um estilo funcional de trabalho com bancos de dados. Ela não usa anotações ou reflexão, mas sim DSL e extensões do Kotlin. O Ktorm suporta vários SGBDs (MySQL, PostgreSQL, Oracle, SQLite, etc.) e pode funcionar tanto com JDBC quanto com dialetos SQL.



Exemplo de código com Ktorm

// Conexão e definição da tabelaval 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