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
}