GORM 通过将 Go 结构体(Go structs) 映射到数据库表来简化数据库交互。 了解如何在GORM中定义模型,是充分利用GORM全部功能的基础。
模型是使用普通结构体定义的。 这些结构体可以包含具有基本Go类型、指针或这些类型的别名,甚至是自定义类型(只需要实现 包中的Scanner和Valuer接口)。
考虑以下 模型的示例:
在此模型中:
- 具体数字类型如 、和 直接使用。
- 指向 和 类型的指针表示可空字段。
- 来自 包的 和 用于具有更多控制的可空字段。
- 和 是特殊字段,当记录被创建或更新时,GORM 会自动向内填充当前时间。
- Non-exported fields (starting with a small letter) are not mapped
除了 GORM 中模型声明的基本特性外,强调下通过 serializer 标签支持序列化也很重要。 此功能增强了数据存储和检索的灵活性,特别是对于需要自定义序列化逻辑的字段。详细说明请参见 Serializer。
- 主键:GORM 使用一个名为 的字段作为每个模型的默认主键。
- 表名:默认情况下,GORM 将结构体名称转换为 并为表名加上复数形式。 For instance, a struct becomes in the database, and a becomes .
- 列名:GORM 自动将结构体字段名称转换为 作为数据库中的列名。
- 时间戳字段:GORM使用字段 和 来自动跟踪记录的创建和更新时间。
遵循这些约定可以大大减少您需要编写的配置或代码量。 但是,GORM也具有灵活性,允许您根据自己的需求自定义这些设置。 您可以在GORM的约定文档中了解更多关于自定义这些约定的信息。
GORM提供了一个预定义的结构体,名为,其中包含常用字段:
- 将其嵌入在您的结构体中: 您可以直接在您的结构体中嵌入 ,以便自动包含这些字段。 这对于在不同模型之间保持一致性并利用GORM内置的约定非常有用,请参考嵌入结构。
- 包含的字段:
- :每个记录的唯一标识符(主键)。
- :在创建记录时自动设置为当前时间。
- :每当记录更新时,自动更新为当前时间。
- :用于软删除(将记录标记为已删除,而实际上并未从数据库中删除)。
可导出的字段在使用 GORM 进行 CRUD 时拥有全部的权限,此外,GORM 允许您用标签控制字段级别的权限。这样您就可以让一个字段的权限是只读、只写、只创建、只更新或者被忽略
GORM 约定使用 、 追踪创建/更新时间。如果您定义了这种字段,GORM 在创建、更新时会自动填充 当前时间
要使用不同名称的字段,您可以配置 、 标签。
如果您想要保存 UNIX(毫/纳)秒时间戳,而不是 time,您只需简单地将 修改为 即可
对于匿名字段,GORM 会将其字段包含在父结构体中,例如:
对于正常的结构体字段,你也可以通过标签 将其嵌入,例如:
并且,您可以使用标签 来为 db 中的字段名添加前缀,例如:
Tags are optional to use when declaring models, GORM supports the following tags: Tags are case insensitive, however is preferred. If multiple tags are used they should be separated by a semicolon (). Characters that have special meaning to the parser can be escaped with a backslash () allowing them to be used as parameter values.
GORM 允许通过标签为关联配置外键、约束、many2many 表,详情请参考 关联部分
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/221936.html