GORM 知识点

资料 网址
GORM官方文档 http://gorm.io/zh_CN/docs/index.html

看到:https://gorm.io/zh_CN/docs/advanced_query.html

  1. 生成的 SQL 语句会排除没有值或值为 零值 的字段。
  2. 注意 所有字段的零值, 比如 0, '', false 或者其它 零值,都不会保存到数据库内,但会使用他们的默认值。 如果你想避免这种情况,可以考虑使用指针或实现 Scanner/Valuer 接口
  3. 当通过结构体进行查询时,GORM将会只通过非零值字段查询,这意味着如果你的字段值为0,'', false 或者其他 零值时,将不会被用于构建查询条件;你可以使用指针或实现 Scanner/Valuer 接口来避免这个问题.
  4. Count 必须是链式查询的最后一个操作 ,因为它会覆盖前面的 SELECT,但如果里面使用了 count 时不会覆盖
  5. Save会更新所有字段,即使你没有赋值;如果你只希望更新指定字段,可以使用Update或者Updates;
  6. 无 Hooks 更新:上面的更新操作会自动运行 model 的 BeforeUpdate, AfterUpdate 方法,更新 UpdatedAt 时间戳, 在更新时保存其 Associations, 如果你不想调用这些方法,你可以使用 UpdateColumn, UpdateColumns
  7. 批量更新时 Hooks 不会运行
  8. 警告:删除记录时,请确保主键字段有值,GORM 会通过主键去删除记录,如果主键为空,GORM 会删除该 model 的所有记录。
  9. 软删除:如果一个 model 有 DeletedAt 字段,他将自动获得软删除的功能! 当调用 Delete 方法时, 记录不会真正的从数据库中被删除, 只会将DeletedAt 字段的值会被设置为当前时间
  10. 想要创建包含多个整型的复合主键,你需要为这些整型字段关闭 auto_increment

GORM 倾向于约定,而不是配置。默认情况下,GORM 使用 ID 作为主键,使用结构体名的 蛇形复数 作为表名,字段名的 蛇形 作为列名,并使用 CreatedAt、UpdatedAt 字段追踪创建、更新时间

GORM 约定使用 CreatedAt、UpdatedAt 追踪创建/更新时间。如果您定义了这种字段,GORM 在创建、更新时会自动填充 当前时间

对于正常的结构体字段,你也可以通过标签 embedded 将其嵌入;并且,您可以使用标签 embeddedPrefix 来为 db 中的字段名添加前缀

当查询数据库时它添加了 LIMIT 1 条件,且没有找到记录时,它会返回 ErrRecordNotFound 错误

通过 -1 消除 Limit 条件
通过 -1 消除 Offset 条件

posted on 2020-08-07 00:03  cag2050  阅读(355)  评论(0编辑  收藏  举报

导航