Trabalho com bancos de dados em Kotlin: PostgreSQL e MongoDB para iniciantes

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

Introdução ao trabalho com bancos de dados em Kotlin

\n\n

Kotlin é uma linguagem moderna estaticamente tipada, executada na JVM, que está ganhando popularidade rapidamente devido à sua concisão e segurança. Uma das habilidades essenciais para qualquer desenvolvedor é saber interagir com bancos de dados. Neste artigo, veremos como conectar e realizar as operações básicas (CRUD) com os dois tipos de BD mais populares: o relacional PostgreSQL e o orientado a documentos MongoDB.

\n\n

Usaremos bibliotecas modernas, totalmente adaptadas ao Kotlin idiomático:

\n
    \n
  • Exposed — framework ORM da JetBrains para bancos de dados SQL (PostgreSQL, MySQL, etc.).
  • \n
  • KMongo — cliente ODM reativo para MongoDB, construído sobre corrotinas.
  • \n
\n\n

O artigo é voltado para iniciantes: abordaremos a configuração do projeto, a conexão ao BD e exemplos simples de inserção, leitura, atualização e exclusão de dados.

\n\n

1. Configuração do projeto e adição de dependências

\n\n

Para começar, crie um novo projeto Kotlin (por exemplo, via IntelliJ IDEA com Gradle ou Maven). Adicione as dependências necessárias no arquivo build.gradle.kts.

\n\n

Dependências Gradle para PostgreSQL (Exposed)

\n
dependencies {\n    // Exposed\n    implementation("org.jetbrains.exposed:exposed-core:0.44.1")\n    implementation("org.jetbrains.exposed:exposed-dao:0.44.1")\n    implementation("org.jetbrains.exposed:exposed-jdbc:0.44.1")\n\n    // Driver PostgreSQL\n    implementation("org.postgresql:postgresql:42.7.1")\n\n    // Pool de conexões (HikariCP)\n    implementation("com.zaxxer:HikariCP:5.1.0")\n}
\n\n

Dependências Gradle para MongoDB (KMongo)

\n
dependencies {\n    // KMongo (com corrotinas)\n    implementation("org.litote.kmongo:kmongo-coroutine:4.11.0")\n\n    // Ktor Client (se precisar de driver reativo)\n    implementation("org.litote.kmongo:kmongo-async:4.11.0")\n}
\n\n

Após sincronizar o projeto, podemos prosseguir com a conexão.

\n\n

2. Trabalhando com PostgreSQL via Exposed

\n\n

O Exposed oferece duas abordagens: DSL (consultas SQL type-safe) e DAO (mapeamento objeto-relacional). Usaremos DAO, que é mais intuitivo para iniciantes.

\n\n

Conexão ao banco de dados

\n
import org.jetbrains.exposed.sql.Database\nimport org.jetbrains.exposed.sql.transactions.transaction\nimport com.zaxxer.hikari.HikariConfig\nimport com.zaxxer.hikari.HikariDataSource\n\nfun connectToPostgres() {\n    val config = HikariConfig().apply {\n        jdbcUrl = "jdbc:postgresql://localhost:5432/mydb"\n        driverClassName = "org.postgresql.Driver"\n        username = "user"\n        password = "password"\n        maximumPoolSize = 10\n    }\n    val dataSource = HikariDataSource(config)\n    Database.connect(dataSource)\n    println("Conexão com PostgreSQL estabelecida!")\n}
\n\n

Definição da tabela e entidade

\n
import org.jetbrains.exposed.dao.id.IntIdTable\nimport org.jetbrains.exposed.dao.IntEntity\nimport org.jetbrains.exposed.dao.IntEntityClass\n\n// Definindo a tabela\nobject UsersTable : IntIdTable("users") {\n    val name = varchar("name", 100)\n    val email = varchar("email", 255).uniqueIndex()\n    val age = integer("age").default(18)\n}\n\n// Definindo a Entity (DAO)\nclass UserEntity(id: EntityID<Int>) : IntEntity(id) {\n    companion object : IntEntityClass<UserEntity>(UsersTable)\n\n    var name by UsersTable.name\n    var email by UsersTable.email\n    var age by UsersTable.age\n}
\n\n

Operações CRUD

\n
fun performCRUD() {\n    transaction {\n        // Criar tabela (se não existir)\n        SchemaUtils.create(UsersTable)\n\n        // INSERT\n        val newUser = UserEntity.new {\n            name = "Ivan Petrov"\n            email = "ivan@example.com"\n            age = 25\n        }\n        println("Usuário criado                

Blogs

Book Recommendations