GORM 知识点
资料 | 网址 |
---|---|
GORM官方文档 | http://gorm.io/zh_CN/docs/index.html |
- 生成的 SQL 语句会排除没有值或值为 零值 的字段。
- 注意 所有字段的零值, 比如 0, '', false 或者其它 零值,都不会保存到数据库内,但会使用他们的默认值。 如果你想避免这种情况,可以考虑使用指针或实现 Scanner/Valuer 接口
- 当通过结构体进行查询时,GORM将会只通过非零值字段查询,这意味着如果你的字段值为0,'', false 或者其他 零值时,将不会被用于构建查询条件;你可以使用指针或实现 Scanner/Valuer 接口来避免这个问题.
- Count 必须是链式查询的最后一个操作 ,因为它会覆盖前面的 SELECT,但如果里面使用了 count 时不会覆盖
- Save会更新所有字段,即使你没有赋值;如果你只希望更新指定字段,可以使用Update或者Updates;
- 无 Hooks 更新:上面的更新操作会自动运行 model 的 BeforeUpdate, AfterUpdate 方法,更新 UpdatedAt 时间戳, 在更新时保存其 Associations, 如果你不想调用这些方法,你可以使用 UpdateColumn, UpdateColumns
- 批量更新时 Hooks 不会运行
- 警告:删除记录时,请确保主键字段有值,GORM 会通过主键去删除记录,如果主键为空,GORM 会删除该 model 的所有记录。
- 软删除:如果一个 model 有 DeletedAt 字段,他将自动获得软删除的功能! 当调用 Delete 方法时, 记录不会真正的从数据库中被删除, 只会将DeletedAt 字段的值会被设置为当前时间
- 想要创建包含多个整型的复合主键,你需要为这些整型字段关闭 auto_increment
GORM 倾向于约定,而不是配置。默认情况下,GORM 使用 ID 作为主键,使用结构体名的 蛇形复数 作为表名,字段名的 蛇形 作为列名,并使用 CreatedAt、UpdatedAt 字段追踪创建、更新时间
GORM 约定使用 CreatedAt、UpdatedAt 追踪创建/更新时间。如果您定义了这种字段,GORM 在创建、更新时会自动填充 当前时间
对于正常的结构体字段,你也可以通过标签 embedded 将其嵌入;并且,您可以使用标签 embeddedPrefix 来为 db 中的字段名添加前缀
当查询数据库时它添加了 LIMIT 1 条件,且没有找到记录时,它会返回 ErrRecordNotFound 错误
通过 -1 消除 Limit 条件
通过 -1 消除 Offset 条件