Trabalho com Bancos de Dados em Kotlin: PostgreSQL e MongoDB

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: Por que Kotlin para Trabalhar com Bancos de Dados?

Kotlin é uma linguagem moderna de tipagem estática que é totalmente compatível com Java e é ativamente usada para criar aplicações backend. Graças à sua sintaxe concisa, segurança contra nulos e ferramentas poderosas, Kotlin é ideal para trabalhar com bancos de dados relacionais (PostgreSQL) e orientados a documentos (MongoDB). Neste artigo, analisaremos exemplos práticos de conexão, realização de operações CRUD e otimização de consultas.

Veremos duas bibliotecas populares: Exposed (para PostgreSQL) e KMongo (para MongoDB). Você aprenderá como configurar o ambiente, escrever consultas eficientes e evitar erros comuns.



1. Trabalhando com PostgreSQL via Exposed

Exposed é uma biblioteca ORM para Kotlin que fornece duas APIs: DSL (Domain-Specific Language) para escrever consultas no estilo SQL e DAO (Data Access Object) para uma abordagem orientada a objetos. Vamos ver ambas as opções.



1.1. Conexão e Configuração

Adicione as dependências ao build.gradle.kts:

dependencies {    implementation("org.jetbrains.exposed:exposed-core:0.41.1")    implementation("org.jetbrains.exposed:exposed-dao:0.41.1")    implementation("org.jetbrains.exposed:exposed-jdbc:0.41.1")    implementation("org.postgresql:postgresql:42.5.0")}

Conectando ao banco de dados:

import org.jetbrains.exposed.sql.Databaseimport org.jetbrains.exposed.sql.transactions.transaction

fun main() { Database.connect( url = "jdbc:postgresql://localhost:5432/mydb", driver = "org.postgresql.Driver", user = "user", password = "password" ) println("Conexão com PostgreSQL estabelecida")}


1.2. Criando uma Tabela e Operações CRUD (DSL)

Vamos definir a tabela Users:

import org.jetbrains.exposed.sql.Tableimport org.jetbrains.exposed.sql.insertimport org.jetbrains.exposed.sql.selectAllimport org.jetbrains.exposed.sql.update

object Users : Table() { val id = integer("id").autoIncrement() val name = varchar("name", 50) val email = varchar("email", 100).uniqueIndex() override val primaryKey = PrimaryKey(id)}


Vamos realizar operações CRUD:

transaction {    // Criando a tabela    SchemaUtils.create(Users)

// INSERT Users.insert { it[name] = "Alexey" it[email] = "alex@example.com" }

// SELECT val users = Users.selectAll().map { "${it[Users.id]}: ${it[Users.name]} (${it[Users.email]})" } println(users)

// UPDATE Users.update({ Users.id eq 1 }) { it[name] = "Alexey Ivanov" }

// DELETE (usando deleteWhere) Users.deleteWhere { Users.id eq 2 }}


1.3. Abordagem DAO

Vamos criar uma entidade e uma classe DAO:

import org.jetbrains.exposed.dao.IntEntityimport org.jetbrains.exposed.dao.IntEntityClassimport org.jetbrains.exposed.dao.id.EntityIDimport org.jetbrains.exposed.dao.id.IntIdTable

object UsersDAO : IntIdTable() { val name = varchar("name", 50) val email = varchar("email", 100)}

class User(id: EntityID<Int>) : IntEntity(id) { companion object : IntEntityClass<User>(UsersDAO) var name by UsersDAO.name var email by UsersDAO.email}

// Uso (Usage)transaction { val newUser = User.new { name = "Maria" email = "maria@example.com" } println("Usuário criado com ID: ${newUser.id.value}")}


2. Trabalhando com MongoDB via KMongo

KMongo é um driver orientado a corrotinas para MongoDB, construído sobre o driver Java oficial. Ele suporta serialização via kotlinx.serialization e Jackson.



2.1. Conectando o KMongo

Adicione ao build.gradle.kts:

Blogs

Book Recommendations