# 使用 GORM 操作数据库

URL: https://caijiao.org/go/08-advanced/07-gorm
Source: docs/go/08-advanced/07-gorm.md
Description: 本节介绍 GORM 的基本使用方法，包括模型定义、增删改查操作及事务管理，是 Go 语言常用的 ORM 框架。

## 1. 安装 GORM

```bash
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
```

## 2. 初始化数据库连接

```go
import (
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
)

dsn := "user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
    panic("failed to connect database")
}
```

## 3. 定义模型

```go
type User struct {
    ID    uint   `gorm:"primaryKey"`
    Name  string
    Email string `gorm:"unique"`
    Age   int
}
```

## 4. 自动迁移

```go
db.AutoMigrate(&User{})
```

自动创建或更新数据表结构。

## 5. CRUD 操作

### 创建

```go
user := User{Name: "Alice", Email: "alice@example.com", Age: 25}
db.Create(&user)
```

### 查询

```go
var user User
db.First(&user, 1)                 // 根据主键查询
db.Where("name = ?", "Alice").Find(&user)
```

### 更新

```go
db.Model(&user).Update("Age", 26)
```

### 删除

```go
db.Delete(&user)
```

## 6. 事务

```go
tx := db.Begin()
if err := tx.Error; err != nil {
    return err
}

if err := tx.Create(&User{Name: "Bob"}).Error; err != nil {
    tx.Rollback()
    return err
}

tx.Commit()
```

---

GORM 简化了数据库操作流程，支持丰富的功能和灵活的查询，是 Go 项目中高效操作数据库的利器。
