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
Product
que representa una taula de la base de dades. Utilitzem etiquetes per especificar claus primàries i únics. - Inicialització de la Connexió: Utilitzem
gorm.Open
per connectar-nos a una base de dades SQLite. - Migració de l'Esquema:
db.AutoMigrate
crea la taulaproducts
basada en l'estructuraProduct
. - Operacions CRUD:
- Crear:
db.Create
afegeix un nou registre a la taula. - Llegir:
db.First
recupera un registre de la taula. - Actualitzar:
db.Model(&product).Update
actualitza un camp del registre. - Esborrar:
db.Delete
elimina un registre de la taula.
- Crear:
Exercicis Pràctics
Exercici 1: Crear una Taula d'Usuaris
- Defineix una estructura
User
amb els campsID
,Name
, iEmail
. - Utilitza GORM per crear la taula
users
i 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: "[email protected]"}) db.Create(&User{Name: "Jane Doe", Email: "[email protected]"}) }
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 = ?", "[email protected]") 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