GORM 允许进行链式操作,所以您可以像这样写代码:
db.Where("name = ?", "jinzhu").Where("age = ?", 18).First(&user) |
GORM 中有三种类型的方法: 链式方法
、终结方法
、新建会话方法
在 链式方法
, 终结方法
之后, GORM 返回一个初始化的 *gorm.DB
实例,实例不能安全地重复使用,并且新生成的 SQL 可能会被先前的条件污染,例如:
queryDB := DB.Where("name = ?", "jinzhu") |
为了重新使用初始化的 *gorm.DB
实例, 您可以使用 新建会话方法
创建一个可共享的 *gorm.DB
, 例如:
queryDB := DB.Where("name = ?", "jinzhu").Session(&gorm.Session{}) |
链式方法
链式方法是将 Clauses
修改或添加到当前 Statement
的方法,例如:
Where
, Select
, Omit
, Joins
, Scopes
, Preload
, Raw
(Raw
can’t be used with other chainable methods to build SQL)…
这是 完整方法列表,也可以查看 SQL 构建器 获取更多关于 Clauses
的信息
终结方法
终结(方法) 是会立即执行注册回调的方法,然后生成并执行 SQL,比如这些方法:
Create
, First
, Find
, Take
, Save
, Update
, Delete
, Scan
, Row
, Rows
…
查看完整方法列表
新建会话方法
GORM 定义了 Session
、WithContext
、Debug
方法做为 新建会话方法
,查看会话 获取详情.
在 链式方法
, Finisher 方法
之后, GORM 返回一个初始化的 *gorm.DB
实例,不能安全地再使用。您应该使用 新建会话方法
来标记 *gorm.DB
为可共享。
让我们用实例来解释它:
示例 1:
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{}) |
(错误的) 示例2:
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{}) |
示例 3:
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{}) |