gorm介绍
最后更新于:2022-04-02 04:52:36
GORM是使用Go语言开发的友好的ORM库。
## 安装
~~~
go get -u github.com/jinzhu/gorm
~~~
## 通用数据库接口sql.DB
从`*gorm.DB`连接获取通用数据库接口[\*sql.DB](http://golang.org/pkg/database/sql/#DB)
~~~
// 获取通用数据库对象`*sql.DB`以使用其函数
db.DB()
// Ping
db.DB().Ping()
~~~
### 连接池
~~~
db.DB().SetMaxIdleConns(10)
db.DB().SetMaxOpenConns(100)
~~~
## 复合主键
将多个字段设置为主键以启用复合主键
~~~
type Product struct {
ID string `gorm:"primary_key"`
LanguageCode string `gorm:"primary_key"`
}
~~~
## 日志
Gorm有内置的日志记录器支持,默认情况下,它会打印发生的错误
~~~
// 启用Logger,显示详细日志
db.LogMode(true)
// 禁用日志记录器,不显示任何日志
db.LogMode(false)
// 调试单个操作,显示此操作的详细日志
db.Debug().Where("name = ?", "jinzhu").First(&User{})
~~~
### 自定义日志
参考GORM的默认记录器如何自定义它[https://github.com/jinzhu/gorm/blob/master/logger.go](https://github.com/jinzhu/gorm/blob/master/logger.go)
~~~
db.SetLogger(gorm.Logger{revel.TRACE})
db.SetLogger(log.New(os.Stdout, "\r\n", 0))
~~~
## 架构
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`回调来运行操作。
';