ZBLOG

github.com/jinzhu/gorm

github.com/jinzhu/gorm 是 Go 语言中一个广泛使用的 ORM(对象关系映射)库,用于简化数据库操作(如 MySQL、PostgreSQL、SQLite 等)。以下是关键点总结和实用指南:


1. 核心功能

  • 关联查询:支持 Has ManyBelongs ToMany2Many 等。
  • 链式调用:通过 .Where(), .Preload(), .Joins() 构建查询。
  • 事务处理db.Begin(), db.Commit(), db.Rollback()
  • 钩子(Hooks):在 Create/Save/Update/Delete 前后触发自定义逻辑。

2. 常见用法示例

(1) 基本查询

var user User
db.Where("name = ?", "john").First(&user) // SELECT * FROM users WHERE name='john' LIMIT 1;

// 预加载关联数据
db.Preload("Orders").Find(&users) 

(2) 创建记录

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

(3) 事务处理

tx := db.Begin()
defer func() {
    if r := recover(); r != nil {
        tx.Rollback()
    }
}()

if err := tx.Create(&order).Error; err != nil {
    tx.Rollback()
    return err
}
tx.Commit()

3. VS gorm.io/gorm (新版GORM)

特性 github.com/jinzhu/gorm (旧版) gorm.io/gorm (新版)
维护状态 ❌ 已停止更新 ✅ 活跃维护
Context支持 ❌ No ✅ Yes
性能优化 ⚠️ 一般 ✅ Better
模块化设计 ❌ No ✅ Yes

建议新项目直接使用 gorm.io/gorm


4. 典型问题解决

(1) 连接池配置

sqlDB, _ := db.DB()
sqlDB.SetMaxOpenConns(100) // 最大连接数
sqlDB.SetMaxIdleConns(10)   // 空闲连接数

(2) N+1查询问题

使用 .Preload()

db.Preload("Orders.Items").Find(&users)

(3) Debug日志

db.LogMode(true) // v1旧版语法(v2用Logger配置)

5. 学习资源推荐

如果需要具体场景的代码示例或问题排查,可以进一步提问!


内容由零声教学AI助手提供,问题来源于学员提问

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?