首页 > 其他分享 >gorm

gorm

时间:2024-06-13 14:33:11浏览次数:18  
标签:time GORM sql Time Model gorm

模型定义 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.

模型定义

GORM 通过将 Go 结构体(Go structs) 映射到数据库表来简化数据库交互。 了解如何在GORM中定义模型,是充分利用GORM全部功能的基础。

模型是使用普通结构体定义的。 这些结构体可以包含具有基本Go类型、指针或这些类型的别名,甚至是自定义类型(只需要实现 database/sql 包中的ScannerValuer接口)。

考虑以下 user 模型的示例:

type User struct {
  ID           uint           // Standard field for the primary key
  Name         string         // 一个常规字符串字段
  Email        *string        // 一个指向字符串的指针, allowing for null values
  Age          uint8          // 一个未签名的8位整数
  Birthday     *time.Time     // A pointer to time.Time, can be null
  MemberNumber sql.NullString // Uses sql.NullString to handle nullable strings
  ActivatedAt  sql.NullTime   // Uses sql.NullTime for nullable time fields
  CreatedAt    time.Time      // 创建时间(由GORM自动管理)
  UpdatedAt    time.Time      // 最后一次更新时间(由GORM自动管理)
}

  

约定

  1. 主键:GORM 使用一个名为ID 的字段作为每个模型的默认主键

  2. 表名:默认情况下,GORM 将结构体名称转换为 snake_case 并为表名加上复数形式。 例如,一个 User 结构体在数据库中的表名变为 users 。

  3. 列名:GORM 自动将结构体字段名称转换为 snake_case 作为数据库中的列名。

  4. 时间戳字段:GORM使用字段 CreatedAt 和 UpdatedAt 来自动跟踪记录的创建和更新时间

 

gorm.Model

// gorm.Model 的定义
type Model struct {
  ID        uint           `gorm:"primaryKey"`
  CreatedAt time.Time
  UpdatedAt time.Time
  DeletedAt gorm.DeletedAt `gorm:"index"`
}

  

GORM提供了一个预定义的结构体,名为gorm.Model,其中包含常用字段:

  • 将其嵌入在您的结构体中: 您可以直接在您的结构体中嵌入 gorm.Model ,以便自动包含这些字段。 这对于在不同模型之间保持一致性并利用GORM内置的约定非常有用,请参考嵌入结构

  • 包含的字段

    • ID :每个记录的唯一标识符(主键)。
    • CreatedAt :在创建记录时自动设置为当前时间。
    • UpdatedAt:每当记录更新时,自动更新为当前时间。
    • DeletedAt:用于软删除(将记录标记为已删除,而实际上并未从数据库中删除)

标签:time,GORM,sql,Time,Model,gorm
From: https://www.cnblogs.com/rohens-hbg/p/18245809

相关文章

  • gorm的upsert操作不同字段
    场景:“INSERTINTO...ONDUPLICATEKEYUPDATE”的应用,在UPDATE时不能更新字段f_create_uid和f_create_time的值,而必须更新f_update_uid和f_update_time的值。关键点在于指定UPDATE不更新的字段列表,实现依赖gorm的tag,但如果struct的field名同表的field名,......
  • 【go】【gorm】
    @目录写在前面题目解题难度参考资料基础/标准库/第三方库golang导航编程规范算法|面试项目写在前面相关博文个人博客首页免责声明:仅供学习交流使用!开源框架可能存在的风险和相关后果将完全由用户自行承担,本人不承担任何法律责任。题目解题难度更详细的GORM速查表......
  • gorm实现MySQL的INSERT INTO ... ON DUPLICATE KEY UPDATE差异化插入和更新
    比如插入f_create_uid,更新时忽略f_create_uid,只更新f_update_uid。可使用gorm的BeforeCreate和BeforeUpdate钩子,这两个钩子分别在创建和更新记录之前被调用。//BeforeCreate在创建记录之前调用func(dob*MyStruct)BeforeCreate(tx*gorm.DB)(errerror){dob......
  • 30-ORM:CURD神器GORM包介绍及实战
      目前,GitHub上star数最多的是GORM,它也是当前Go项目中使用最多的ORM。 GORM基础知识介绍GORM是Go语言的ORM包,功能强大,调用方便。像腾讯、华为、阿里这样的大厂,都在使用GORM来构建企业级的应用。 功能全。使用ORM操作数据库的接口,GORM都有,可以满足我们开发中对数据库......
  • golang中GORM使用 many2many 多对多关联查询-详细案例
    表结构和数据user表CREATETABLE`user`(`id`bigint(20)NOTNULL,`user_key`bigint(20)NOTNULL,`account`char(32)NOTNULL)ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;为了测试将user_key和id写入同样的值数据:+----+----------+---------+|id|user_k......
  • 【go】gorm中去掉默认表名后的s复数形式
    【go】gorm中去掉默认表名后的s复数形式背景使用gorm时,查询数据时mysql报错,显示表名不存在,仔细查看,报错的表名中增加了s,比如实际数据库表名是:ali_user,报错信息中显示表ali_users不存在原因gorm默认使用结构体的复数形式作为表名比如:#表结构体定义如下:typeAliUserstruc......
  • Gorm框架
    目录Go的orm框架1.gorm2.facebook-ent3.xorm4.upper/db:5.gorose一、Gorm介绍二、gorm连接数据库2.1快速链接mysql2.2其他配置2.3加入日志打印sql(1)日志级别(2)Debug(3)具体代码三、automigrate功能四、快速增删改查4.1快速增删改查4.2逻辑删除五、不能更新零值的问题5.1使......
  • gorm使用事务并发情况下切有最大mysql连接数限制的情况下的BUG,踩坑了
    现象服务器pprof中的goroutines很多,无法释放,肯定是异常.代码//收到请求上个赛季个人秘境赛季排行func(this*MsgProc)MsgProc_PersonSecretLastRankReq(msg*protoMsg.PersonSecretLastRankReq){ global.GetSrvInst().GetThreadGo().Go(func(ctxcontext.Context)......
  • GORM 自定义time.time日期时间输出格式
    1packagehelper23import(4"database/sql/driver"5"encoding/json"6"fmt"7"time"8)910constCUS_TIME_FORMAT="2006-01-0215:04:05"1112typeCustomTimestruct{13......
  • gorm 中left join的使用
    使用mysql语句执行时可以执行成功,但是使用go语言编程保存到struct中时出现问题。代码如下:sflog.Debug("QueryByTaskId",id)  typeDatastruct{    TaskId     int64 `json:"taskId"`    VehicleName  string `json:"vehicleNa......