Go GORM 使用指南
GORM 是 Go 语言中最流行的 ORM (对象关系映射) 库之一,支持 MySQL、PostgreSQL、SQLite、SQL Server 等数据库。以下是 GORM 的核心用法总结:
1. 安装与初始化
import (
"gorm.io/gorm"
"gorm.io/driver/mysql" // MySQL驱动
// "gorm.io/driver/postgres" // PostgreSQL驱动
// "gorm.io/driver/sqlite" // SQLite驱动
)
// 初始化连接
dsn := "user:pass@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")
}
2. 定义模型
type User struct {
gorm.Model // 内嵌包含ID, CreatedAt, UpdatedAt, DeletedAt字段
Name string `gorm:"size:255"`
Age int
Email string `gorm:"uniqueIndex;not null"`
}
// TableName方法可自定义表名
func (User) TableName() string {
return "custom_users"
}
3. CRUD操作
Create (创建)
// 单条插入
user := User{Name: "Alice", Age: 25}
result := db.Create(&user)
fmt.Println(user.ID) // 返回主键
fmt.Println(result.Error) // 返回错误
//批量插入
users := []User{{Name:"Bob"}, {Name:"Cathy"}}
db.Create(&users)
Read (查询)
//获取第一条记录(主键升序)
var user User
db.First(&user)
// SELECT * FROM users ORDER BY id LIMIT1;
//条件查询
db.Where("name = ?", "Alice").First(&user)
db.Where(&User{Name:"Alice"}).First(&user)
//选择特定字段
db.Select("name","age").Find(&users)
Update (更新)
//保存所有字段
db.Save(&user)
//更新单个列
db.Model(&user).Update("name","NewName")
//更新多列
updates:=map[string]interface{}{
"name":"NewName",
"age":30,
}
db.Model(&user).Updates(updates)
Delete (删除)
//软删除(如果模型有DeletedAt字段)
db.Delete(&user)
//物理删除
db.Unscoped().Delete(&user)
##4.高级特性
###关联查询
type CreditCard struct{
gorm.Model
Number string
UserID uint //外键
}
type User struct{
gorm.Model
CreditCards []CreditCard `gorm:"foreignKey:UserID"`
}
//预加载关联数据
var user User
db.Preload("CreditCards").First(&user)
###事务处理
tx:= db.Begin()
if err:=tx.Create(&order).Error;err!=nil{
tx.Rollback()
return err
}
if err:=tx.Update(...).Error;err!=nil{
tx.Rollback()
return err
}
return tx.Commit().Error
更多详细用法可以参考官方文档
内容由零声教学AI助手提供,问题来源于学员提问