一、链式基本操作
GORM 的方法可分为三大类:链式方法(Chain Methods)、终结方法(Finisher Methods)和新建会话方法(New Session Methods)。这些分类同时适用于传统 API 和泛型 API。
链式方法(Chain Methods)包含操作:where、Select、Omit、Joins、Scopes、Preload 以及 Raw等。需要注意的是,Raw 方法不能与其他链式方法组合使用来构建 SQL 语句。
终结方法(Finisher Methods)包含:Create、First、Find、Take、Save、Update、Delete、Scan、Row、Rows等。
GORM 通过链式方法(Chain Methods)累积查询条件,仅在调用终结方法(Finisher Methods)时生成并执行 SQL 语句。代码示例如下:
db.Where("age > ?", 18).Where("name = ?", "张三").Find(&user)
上述代码与下述代码执行结果相同:
db.Where("age > ? and name = ?", 18,"张三").Find(&user)
二、动态链式操作
采用分支逻辑可动态调整查询链,该特性特别适用于复杂业务场景的查询构建,代码示例如下:
tx := db.Where("age > ?", 20)
if name != "" {
tx = tx.Where("name = ?", name)
}
tx.Find(&users)
三、链式执行多终结方法
当链式使用 GORM 多个终结方法(Finisher Methods), 后面的终结方法(Finisher Methods)将复用前面的终结方法(