ZBLOG

go gorm

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助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23880

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?