GORM |青训营

62 阅读1分钟

GORM 是一个流行的 Go 语言 ORM(对象关系映射)库,用于简化与数据库的交互。它提供了丰富的功能,包括增、删、查、改等常见数据库操作,以及一些高级功能。以下是一些在 GORM 中常见的数据库操作及其用法示例:

1. 连接数据库:

import (
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
)

// 创建数据库连接
db, err := gorm.Open(mysql.Open("user:password@tcp(host:port)/database?charset=utf8mb4&parseTime=True&loc=Local"), &gorm.Config{})
if err != nil {
    // 处理连接错误
}

2. 定义模型:

type User struct {
    ID       uint   `gorm:"primarykey"`
    Name     string
    Age      int
}

3. 创建数据(插入):

newUser := User{Name: "Alice", Age: 25}
db.Create(&newUser)

4. 查询数据:

var user User
db.First(&user, 1)                  // 根据主键查询
db.Where("name = ?", "Alice").Find(&user) // 使用条件查询

5. 更新数据:

db.Model(&user).Update("Age", 26)

6. 删除数据

db.Delete(&user, 1)                  // 根据主键删除
db.Where("name = ?", "Alice").Delete(&user) // 使用条件删除

7. 事务操作: 在复杂的数据库操作中,事务是保持数据一致性和完整性的重要机制。

tx := db.Begin()
if err := tx.Create(&User{Name: "Bob", Age: 30}).Error; err != nil {
    tx.Rollback()
} else {
    tx.Commit()
}

8. 钩子(Hooks): Hook 是在创建、查询、更新、删除等操作之前、之后调用的函数。 如果已经为模型定义了指定的方法,它会在创建、更新、查询、删除时自动被调用。如果任何回调返回错误,GORM 将停止后续的操作并回滚事务。

钩子方法的函数签名应该是 func(*gorm.DB) error

func (u *User) BeforeCreate(tx *gorm.DB) (err error) {
    // 在创建前执行的操作
    return nil
}