go学习笔记:gorm 语法中加Model与不加Model,有什么差异?
在 GORM 中,加 Model
与不加 Model
有以下差异:
1. 语法差异
不加 Model(直接查询)
err := DB.Where("username=? and password =?", n, p).First(&uResult)
加 Model(显式指定模型)
err := DB.Model(&User{}).Where("username=? and password =?", n, p).First(&uResult)
2. 主要区别
表名确定
- 不加 Model:GORM 根据传入的结构体类型自动推断表名
- 加 Model:显式指定要查询的模型,更明确
查询上下文
- 不加 Model:依赖链式调用中的结构体类型
- 加 Model:明确指定查询的模型类型
代码可读性
- 不加 Model:简洁但可能不够明确
- 加 Model:更清晰地表达查询意图
3. 实际效果
在大多数情况下,两种写法效果相同:
// 这两种写法效果相同
DB.Where("username = ?", "admin").First(&user)
DB.Model(&User{}).Where("username = ?", "admin").First(&user)
4. 何时使用 Model
推荐使用 Model 的情况:
- 复杂查询:多表关联时更清晰
- 动态查询:根据条件选择不同模型
- 代码可读性:让代码意图更明确
可以省略 Model 的情况:
- 简单查询:单表简单查询
- 链式调用:上下文已经很明确
总结
- 不加 Model:简洁,适合简单查询
- 加 Model:明确,适合复杂查询,代码更清晰
- 两种方式在功能上基本相同,主要区别在于代码可读性和明确性