github.com/jinzhu/gorm
是 Go 语言中一个广泛使用的 ORM(对象关系映射)库,用于简化数据库操作(如 MySQL、PostgreSQL、SQLite 等)。以下是关键点总结和实用指南:
1. 核心功能
- 关联查询:支持
Has Many
、Belongs To
、Many2Many
等。 - 链式调用:通过
.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. 学习资源推荐
- 官方文档 (旧版)
- 新版GORM迁移指南
如果需要具体场景的代码示例或问题排查,可以进一步提问!
内容由零声教学AI助手提供,问题来源于学员提问