En aquest tema, aprendrem a utilitzar un ORM (Object-Relational Mapping) en Go per interactuar amb bases de dades de manera més eficient i amb menys codi repetitiu. Un ORM ens permet treballar amb bases de dades utilitzant objectes en lloc de sentències SQL directes, facilitant així la gestió de dades.
Objectius del Tema
- Entendre què és un ORM i els seus avantatges.
- Configurar un ORM popular en Go.
- Realitzar operacions bàsiques de CRUD (Create, Read, Update, Delete) utilitzant l'ORM.
Què és un ORM?
Un ORM (Object-Relational Mapping) és una tècnica de programació que permet convertir dades entre sistemes de tipus incompatibles utilitzant llenguatges de programació orientats a objectes. En termes simples, un ORM ens permet interactuar amb una base de dades utilitzant objectes en lloc de sentències SQL.
Avantatges d'Utilitzar un ORM
- Abstracció de la Base de Dades: No cal escriure SQL manualment.
- Mantenibilitat: El codi és més net i fàcil de mantenir.
- Portabilitat: Facilita el canvi de bases de dades sense canviar el codi de l'aplicació.
- Seguretat: Redueix el risc d'injeccions SQL.
Configuració de GORM
GORM és un dels ORMs més populars per a Go. A continuació, veurem com configurar-lo i utilitzar-lo per realitzar operacions bàsiques.
Instal·lació de GORM
Per instal·lar GORM, utilitzarem el gestor de paquets go get:
Configuració Bàsica
A continuació, configurarem GORM per utilitzar una base de dades SQLite. Crearem una estructura per representar una taula de la base de dades i veurem com inicialitzar la connexió.
package main
import (
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"log"
)
// Definim una estructura que representa una taula de la base de dades
type Product struct {
ID uint `gorm:"primaryKey"`
Code string `gorm:"unique"`
Price uint
}
func main() {
// Inicialitzem la connexió a la base de dades
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
log.Fatal("failed to connect database")
}
// Migrar l'esquema
db.AutoMigrate(&Product{})
// Crear un nou producte
db.Create(&Product{Code: "D42", Price: 100})
// Llegir el producte
var product Product
db.First(&product, 1) // Trobar producte amb ID 1
db.First(&product, "code = ?", "D42") // Trobar producte amb codi D42
// Actualitzar el producte
db.Model(&product).Update("Price", 200)
// Esborrar el producte
db.Delete(&product, 1)
}Explicació del Codi
- Definició de l'Estructura: Definim una estructura
Productque representa una taula de la base de dades. Utilitzem etiquetes per especificar claus primàries i únics. - Inicialització de la Connexió: Utilitzem
gorm.Openper connectar-nos a una base de dades SQLite. - Migració de l'Esquema:
db.AutoMigratecrea la taulaproductsbasada en l'estructuraProduct. - Operacions CRUD:
- Crear:
db.Createafegeix un nou registre a la taula. - Llegir:
db.Firstrecupera un registre de la taula. - Actualitzar:
db.Model(&product).Updateactualitza un camp del registre. - Esborrar:
db.Deleteelimina un registre de la taula.
- Crear:
Exercicis Pràctics
Exercici 1: Crear una Taula d'Usuaris
- Defineix una estructura
Useramb els campsID,Name, iEmail. - Utilitza GORM per crear la taula
usersi afegeix alguns registres.
Solució
package main
import (
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"log"
)
type User struct {
ID uint `gorm:"primaryKey"`
Name string
Email string `gorm:"unique"`
}
func main() {
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
log.Fatal("failed to connect database")
}
db.AutoMigrate(&User{})
db.Create(&User{Name: "John Doe", Email: "john@example.com"})
db.Create(&User{Name: "Jane Doe", Email: "jane@example.com"})
}Exercici 2: Actualitzar i Esborrar Usuaris
- Actualitza el nom d'un usuari amb un correu electrònic específic.
- Esborra un usuari amb un ID específic.
Solució
package main
import (
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"log"
)
type User struct {
ID uint `gorm:"primaryKey"`
Name string
Email string `gorm:"unique"`
}
func main() {
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
log.Fatal("failed to connect database")
}
db.AutoMigrate(&User{})
// Actualitzar el nom d'un usuari
var user User
db.First(&user, "email = ?", "john@example.com")
db.Model(&user).Update("Name", "John Smith")
// Esborrar un usuari
db.Delete(&user, user.ID)
}Conclusió
En aquest tema, hem après què és un ORM i com utilitzar GORM per realitzar operacions bàsiques de CRUD en una base de dades SQLite. Hem vist com definir estructures que representen taules de la base de dades, com inicialitzar la connexió a la base de dades i com realitzar operacions de creació, lectura, actualització i esborrat de registres.
En el proper tema, explorarem com realitzar migracions de bases de dades per gestionar canvis en l'esquema de manera eficient.
Curs de Programació en Go
Mòdul 1: Introducció a Go
- Introducció a Go
- Configuració de l'Entorn Go
- El Teu Primer Programa en Go
- Sintaxi i Estructura Bàsiques
Mòdul 2: Conceptes Bàsics
Mòdul 3: Estructures de Dades Avançades
Mòdul 4: Gestió d'Errors
Mòdul 5: Concurrència
Mòdul 6: Temes Avançats
Mòdul 7: Desenvolupament Web amb Go
Mòdul 8: Treballant amb Bases de Dades
Mòdul 9: Desplegament i Manteniment
- Construcció i Desplegament d'Aplicacions Go
- Registre
- Monitorització i Optimització del Rendiment
- Millors Pràctiques de Seguretat
