ORM para Kotlin: comparação e exemplos
Kotlin é uma linguagem moderna, ativamente usada para desenvolvimento de aplicações backend, aplicações Android e até projetos multiplataforma. Para trabalhar com bancos de dados, os desenvolvedores frequentemente escolhem ORM (Object-Relational Mapping) para evitar escrever consultas SQL brutas e acelerar o desenvolvimento. Neste artigo, analisaremos três ferramentas ORM populares para Kotlin: Exposed, Ktor (em conjunto com Exposed) e Ktorm. Compararemos sua sintaxe, desempenho e facilidade de uso com exemplos práticos.
1. Exposed — ORM oficial da JetBrains
Exposed é uma biblioteca ORM desenvolvida pela JetBrains especificamente para Kotlin. Ela suporta duas abordagens: DSL (Domain Specific Language) e DAO (Data Access Objects). O Exposed integra-se perfeitamente com o framework Ktor, mas também pode ser usado separadamente.
Principais características:
- Sintaxe DSL leve e intuitiva.
- Suporte a transações, migrações e conexões.
- Trabalha com PostgreSQL, MySQL, H2, SQLite e outros bancos.
- Comunidade ativa e documentação oficial.
Exemplo de código (abordagem DSL):
import org.jetbrains.exposed.sql.*import org.jetbrains.exposed.sql.transactions.transaction
// Definição da tabelaobject Users : Table() { val id = integer("id").autoIncrement() val name = varchar("name", 50) val age = integer("age")
override val primaryKey = PrimaryKey(id)}
// Exemplo de consultafun main() { Database.connect("jdbc:h2:mem:test", driver = "org.h2.Driver")
transaction { SchemaUtils.create(Users)
// Inserção Users.insert { it[name] = "Alice" it[age] = 30 }
// Seleção val result = Users.selectAll().where { Users.age greater 25 } result.forEach { println("${it[Users.name]}: ${it[Users.age]}") } }}2. Ktor + Exposed — combinação para aplicações web
Ktor é um framework web assíncrono para Kotlin. Embora o Ktor em si não forneça um ORM embutido, ele funciona muito bem em conjunto com o Exposed. Essa combinação permite criar APIs REST com o mínimo de código.
Exemplo de integração do Ktor com 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) } }}Essa abordagem é adequada para microsserviços e projetos pequenos, onde a simplicidade e a velocidade de desenvolvimento são importantes.
3. Ktorm — ORM leve e performático
Ktorm é outro ORM popular para Kotlin, focado em desempenho e minimalismo. Ele utiliza programação funcional e suporta tanto DSL quanto sintaxe semelhante a SQL.
Principais características:
- Alto desempenho devido à ausência de reflexão.
- Suporte a extensões (por exemplo, para campos JSON).
- Configuração simples e dependências mínimas.
- Trabalha com a maioria dos SGBDs populares.
Exemplo de código Ktorm:
import me.liuwj.ktorm.database.Databaseimport me.liuwj.ktorm.dsl.*import me.liuwj.ktorm.entity.*
// Definição da entidadeinterface User : Entity { compan Também na biblioteca
Parsing de HTML em C# (.NET): bibliotecas HtmlAgilityPack e AngleSharp
PhotosUI para Swift: guia completo com exemplos práticos
Autorização e Autenticação em Java: Spring Security e JWT
Cliente OAuth para Java: ScribeJava e Spring Security OAuth2