1. Gorm介绍
GORM是使用Go语言开发的友好的ORM库。
1.1.1. 安装
go get -u github.com/jinzhu/gorm
通用数据库接口sql.DB
从*gorm.DB
连接获取通用数据库接口*sql.DB
// 获取通用数据库对象`*sql.DB`以使用其函数
db.DB()
// Ping
db.DB().Ping()
1.1.2. 连接池
db.DB().SetMaxIdleConns(10)
db.DB().SetMaxOpenConns(100)
1.1.3. 复合主键
将多个字段设置为主键以启用复合主键
type Product struct {
ID string `gorm:"primary_key"`
LanguageCode string `gorm:"primary_key"`
}
1.1.4. 日志
Gorm有内置的日志记录器支持,默认情况下,它会打印发生的错误
// 启用Logger,显示详细日志
db.LogMode(true)
// 禁用日志记录器,不显示任何日志
db.LogMode(false)
// 调试单个操作,显示此操作的详细日志
db.Debug().Where("name = ?", "jinzhu").First(&User{})
1.1.5. 自定义日志
参考GORM的默认记录器如何自定义它https://github.com/jinzhu/gorm/blob/master/logger.go
db.SetLogger(gorm.Logger{revel.TRACE})
db.SetLogger(log.New(os.Stdout, "\r\n", 0))
1.1.6. 架构
Gorm使用可链接的API,*gorm.DB
是链的桥梁,对于每个链API,它将创建一个新的关系。
db, err := gorm.Open("postgres", "user=gorm dbname=gorm sslmode=disable")
// 创建新关系
db = db.Where("name = ?", "jinzhu")
// 过滤更多
if SomeCondition {
db = db.Where("age = ?", 20)
} else {
db = db.Where("age = ?", 30)
}
if YetAnotherCondition {
db = db.Where("active = ?", 1)
}
当我们开始执行任何操作时,GORM将基于当前的*gorm.DB
创建一个新的*gorm.Scope
实例
// 执行查询操作
db.First(&user)
并且基于当前操作的类型,它将调用注册的creating,updating,querying,deleting或row_querying回调来运行操作。