Kotlin e PostgreSQL: construindo um backend mais rápido do que você imagina

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

Kotlin e PostgreSQL: uma dupla inesperada para o seu backend

\n\n

Quando se trata de desenvolvimento moderno de backend, Kotlin e PostgreSQL aparecem cada vez mais na mesma frase. E isso não é por acaso. Kotlin traz concisão e recursos funcionais ao mundo JVM, enquanto o PostgreSQL continua sendo o padrão de confiabilidade e flexibilidade entre os bancos de dados relacionais. Neste guia, vamos explorar como integrar essas duas tecnologias, escrever código real e analisar as melhores práticas.

\n\n

Se você já conhece Kotlin para backend ou está apenas começando — este artigo fornecerá um plano de ação claro. Vamos nessa!

\n\n

Por que Kotlin + PostgreSQL é incrível?

\n\n

Kotlin é uma linguagem que faz você se apaixonar desde as primeiras linhas. É compatível com Java, mas elimina toneladas de código boilerplate. E o PostgreSQL não é apenas "mais um banco de dados". É uma ferramenta poderosa com suporte a JSON, busca em texto completo, funções de janela e extensões como PostGIS.

\n\n

Juntos, eles oferecem:

\n
    \n
  • Segurança contra nulos em nível de tipo — Kotlin protege você de NPE ao trabalhar com resultados de consultas.
  • \n
  • Assincronicidade nativa — as corrotinas do Kotlin são ideais para trabalhar com pools de conexão.
  • \n
  • DSL para SQL — bibliotecas como Exposed permitem escrever consultas como parte da linguagem.
  • \n
  • Desempenho — JVM + driver JDBC otimizado proporcionam excelente velocidade.
  • \n
\n\n

Preparação do ambiente: o que instalar

\n\n

Antes de escrever código, certifique-se de ter:

\n
    \n
  • JDK 17+ instalado
  • \n
  • IntelliJ IDEA (a Community Edition é suficiente)
  • \n
  • PostgreSQL 14+ (pode ser via Docker: docker run --name pg -e POSTGRES_PASSWORD=pass -p 5432:5432 -d postgres)
  • \n
  • Conhecimento básico de SQL
  • \n
\n\n

Crie um novo projeto Gradle no IntelliJ. Em build.gradle.kts, adicione as dependências:

\n\n
dependencies {\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    implementation("org.postgresql:postgresql:42.7.1")\n    implementation("com.zaxxer:HikariCP:5.1.0")\n    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3")\n}
\n\n

Conexão com PostgreSQL via HikariCP

\n\n

Para trabalhar com PostgreSQL em Kotlin, precisamos de um pool de conexões. O HikariCP é o padrão de facto. É rápido, leve e configurável em poucas linhas.

\n\n

Crie a classe DatabaseFactory:

\n\n
import com.zaxxer.hikari.HikariConfig\nimport com.zaxxer.hikari.HikariDataSource\nimport org.jetbrains.exposed.sql.Database\n\nobject DatabaseFactory {\n    fun init() {\n        val config = HikariConfig().apply {\n            jdbcUrl = "jdbc:postgresql://localhost:5432/yourdb"\n            driverClassName = "org.postgresql.Driver"\n            username = "postgres"\n            password = "pass"\n            maximumPoolSize = 10\n            isAutoCommit = false\n            transactionIsolation = "TRANSACTION_REPEATABLE_READ"\n        }\n\n        val dataSource = HikariDataSource(config)\n        Database.connect(dataSource)\n    }\n}
\n\n

Observe: isAutoCommit = false nos dá controle sobre as transações. Isso é importante para a consistência dos dados.

\n\n

Criação de tabelas com Exposed ORM

\n\n

Exposed é um ORM leve para Kotlin que não impõe suas próprias regras. Você pode trabalhar tanto com DSL quanto com objetos DAO.

\n\n

Vamos definir o modelo de usuário:

\n\n
import org.jetbrains.exposed.sql.Table\n\nobject Users : Table("users") {\n    val id = integer("id").autoIncrement()\n    val name = varchar("name", 100)\n    val email = varchar("email", 255).uniqueIndex()\n    val                

Blogs

Book Recommendations