Exposed para Kotlin: guia completo 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

O que é Exposed e para que serve?

\n\n

Exposed é uma biblioteca ORM (Object-Relational Mapping) leve, porém poderosa, para a linguagem de programação Kotlin, desenvolvida pela empresa JetBrains. Ela oferece duas abordagens principais para trabalhar com bancos de dados: DSL (Domain Specific Language) e DAO (Data Access Objects).

\n\n

Para que serve o Exposed?

\n
    \n
  • Type safety: Ao contrário de consultas SQL brutas, o Exposed usa construções tipadas do Kotlin, permitindo detectar erros em tempo de compilação.
  • \n
  • Concisão: O código em Exposed é significativamente mais curto e legível do que consultas SQL equivalentes ou código Java com JPA.
  • \n
  • Desempenho: Exposed não usa reflexão ou objetos proxy (como Hibernate), tornando-o muito rápido e previsível.
  • \n
  • Flexibilidade: Você pode alternar facilmente entre DSL (para consultas complexas) e DAO (para operações CRUD simples) dentro do mesmo projeto.
  • \n
  • Suporte a múltiplos bancos de dados: PostgreSQL, MySQL, MariaDB, SQLite, H2, Oracle, SQL Server.
  • \n
\n\n

Instalação do Exposed

\n\n

O Exposed é instalado através do sistema de build Gradle ou Maven. Adicione as seguintes dependências ao seu build.gradle.kts:

\n\n
dependencies {\n    // Biblioteca principal\n    implementation("org.jetbrains.exposed:exposed-core:0.44.1")\n    // DSL para consultas\n    implementation("org.jetbrains.exposed:exposed-dao:0.44.1")\n    // Driver JDBC para seu banco de dados (exemplo para PostgreSQL)\n    implementation("org.postgresql:postgresql:42.7.1")\n    // Pool de conexões HikariCP (recomendado)\n    implementation("com.zaxxer:HikariCP:5.1.0")\n    // Logging SQL (opcional)\n    implementation("ch.qos.logback:logback-classic:1.4.14")\n}
\n\n

Para Maven (pom.xml):

\n\n
<dependency>\n    <groupId>org.jetbrains.exposed</groupId>\n    <artifactId>exposed-core</artifactId>\n    <version>0.44.1</version>\n</dependency>
\n\n

Início rápido: exemplo de código

\n\n

Vamos criar uma aplicação simples para gerenciamento de tarefas (ToDo):

\n\n
import org.jetbrains.exposed.sql.*\nimport org.jetbrains.exposed.sql.transactions.transaction\nimport org.jetbrains.exposed.sql.SqlExpressionBuilder.eq\nimport java.time.LocalDateTime\n\n// 1. Definindo a tabela\nobject Tasks : Table() {\n    val id = integer("id").autoIncrement()\n    val title = varchar("title", 255)\n    val description = text("description").nullable()\n    val isCompleted = bool("is_completed").default(false)\n    val createdAt = datetime("created_at").default(LocalDateTime.now())\n\n    override val primaryKey = PrimaryKey(id)\n}\n\n// 2. Data class para conveniência\ndata class Task(\n    val id: Int,\n    val title: String,\n    val description: String?,\n    val isCompleted: Boolean,\n    val createdAt: LocalDateTime\n)\n\nfun main() {\n    // 3. Conectando ao banco de dados (H2 em memória para exemplo)\n    Database.connect("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1", driver = "org.h2.Driver")\n\n    transaction {\n        // 4. Criando a tabela\n        SchemaUtils.create(Tasks)\n\n        // 5. Inserindo dados\n        val insertId = Tasks.insert {\n            it[title] = "Estudar Exposed"\n            it[description] = "Ler a documentação e escrever um exemplo"\n        } get Tasks.id\n\n        println("Tarefa inserida com ID: $insertId")\n\n        // 6. Selecionando todas as tarefas\n        val allTasks = Tasks.selectAll().map { row ->\n            Task(\n                id = row[Tasks.id],\n                title = row[Tasks.title],\n                description = row[Tasks.description],\n                isCompleted = row[Tasks.isCompleted],\n                createdAt = row[Tasks.createdAt]\n            )\n        }\n        println("Todas as tarefas: $allTasks")\n\n        // 7. Atualizando uma tarefa\n        Tasks.updat                    

Recommendations