Aula 12 - Banco de Dados (GORM) 💾
Objetivo
Objetivo: Aprender a conectar sua aplicação Go a um banco de dados relacional (PostgreSQL/SQLite) e realizar operações de CRUD usando o ORM GORM.
1. SQL Nativo vs ORM ⚖️
- database/sql: A interface padrão do Go para SQL. Você escreve as queries manualmente. Mais controle, mais código.
- GORM: O ORM (Object-Relational Mapping) mais popular para Go. Ele converte suas structs diretamente em tabelas e vice-versa. Menos código, mais produtividade.
2. Configurando o GORM e SQLite 🛠️
Para nossos testes, usaremos o SQLite (um banco de dados em arquivo), mas o código é quase idêntico para PostgreSQL.
type Produto struct {
gorm.Model // Adiciona ID, CreatedAt, UpdatedAt, DeletedAt
Nome string
Preco float64
}
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
// Criar a tabela automaticamente (Migration)
db.AutoMigrate(&Produto{})
3. Operações de CRUD 📝
Create (Criar)
Read (Ler)
Update (Atualizar)
Delete (Remover)
4. Integração: API + Banco de Dados (Mermaid) 📊
graph TD
API[Gin API] -->|Struct| GORM[GORM ORM]
GORM -->|SQL| DB[(PostgreSQL/SQLite)]
DB -->|Rows| GORM
GORM -->|Struct| API
5. Migrations: Evoluindo o Esquema 📈
O GORM cuida da criação e atualização das tabelas para você através do AutoMigrate. Se você adicionar um campo novo na Struct, o GORM cria a coluna no banco na próxima execução!
6. Mini-Projeto: API com Persistência Real 🚀
Modifique sua API de Clientes (da aula anterior) para que: 1. Os dados não sejam mais salvos em um slice, mas sim no banco de dados via GORM. 2. Ao iniciar a aplicação, as tabelas sejam criadas automaticamente.
7. Exercícios de Fixação 🧠
- O que a tag
gorm.Modeladiciona à sua struct? - Como você faria uma busca filtrada (WHERE) usando GORM?
- Qual a vantagem de usar
AutoMigrateem vez de criar tabelas manualmente no terminal SQL?
Próxima Aula: Vamos garantir que tudo funcione com Testes Automatizados! ✅🐹