Go GORM 数据库连接与事务操作示例代码
以下是使用 GORM 连接数据库并执行事务的示例代码:
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
// 定义 User 模型
type User struct {
ID uint
Name string
}
func main() {
// 数据库连接字符串
dsn := 'user:password@tcp(127.0.0.1:3306)/database?charset=utf8mb4&parseTime=True&loc=Local'
// 连接数据库
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic(err)
}
// 开始事务
tx := db.Begin()
// 插入数据
user1 := User{Name: 'Alice'}
if err := tx.Create(&user1).Error; err != nil {
// 回滚事务
tx.Rollback()
panic(err)
}
// 更新数据
user2 := User{}
if err := tx.Where('name = ?', 'Alice').First(&user2).Error; err != nil {
// 回滚事务
tx.Rollback()
panic(err)
}
user2.Name = 'Bob'
if err := tx.Save(&user2).Error; err != nil {
// 回滚事务
tx.Rollback()
panic(err)
}
// 提交事务
if err := tx.Commit().Error; err != nil {
// 回滚事务
tx.Rollback()
panic(err)
}
fmt.Println('Data inserted and updated successfully')
}
在上面的代码中,我们首先使用 GORM 中的 gorm.Open() 函数连接 MySQL 数据库,并创建了一个 User 模型。接下来,我们使用 db.Begin() 开始一个事务,然后在事务中插入一条数据,再更新该数据,最后提交事务。如果在任何操作中出现错误,则会回滚事务并抛出 panic。否则,我们会打印出成功的消息。
请注意,我们在每个操作中都使用了 tx 对象而不是 db 对象,这是因为我们希望所有操作都在同一个事务中执行。最后,需要注意的是,在使用完 tx 对象后,必须调用 tx.Rollback() 或 tx.Commit() 方法,否则将在程序退出时自动回滚事务。
原文地址: https://www.cveoy.top/t/topic/lJkT 著作权归作者所有。请勿转载和采集!