網站首頁 編程語言 正文
1. 模型
1.1. 模型定義
type User struct { gorm.Model Birthday time.Time Age int Name string `gorm:"size:255"` // string默認長度為255, 使用這種tag重設。 Num int `gorm:"AUTO_INCREMENT"` // 自增 CreditCard CreditCard // One-To-One (擁有一個 - CreditCard表的UserID作外鍵) Emails []Email // One-To-Many (擁有多個 - Email表的UserID作外鍵 BillingAddress Address // One-To-One (屬于 - 本表的BillingAddressID作外鍵) BillingAddressID sql.NullInt64 ShippingAddress Address // One-To-One (屬于 - 本表的ShippingAddressID作外鍵) ShippingAddressID int IgnoreMe int `gorm:"-"` // 忽略這個字段 Languages []Language `gorm:"many2many:user_languages;"` // Many-To-Many , 'user_languages'是連接表 } type Email struct { ID int UserID int `gorm:"index"` // 外鍵 (屬于), tag `index`是為該列創建索引 Email string `gorm:"type:varchar(100);unique_index"` // `type`設置sql類型, `unique_index` 為該列設置唯一索引 Subscribed bool } type Address struct { ID int Address1 string `gorm:"not null;unique"` // 設置字段為非空并唯一 Address2 string `gorm:"type:varchar(100);unique"` Post sql.NullString `gorm:"not null"` } type Language struct { ID int Name string `gorm:"index:idx_name_code"` // 創建索引并命名,如果找到其他相同名稱的索引則創建組合索引 Code string `gorm:"index:idx_name_code"` // `unique_index` also works } type CreditCard struct { gorm.Model UserID uint Number string }
2. 約定
2.1. gorm.Model 結構體
基本模型定義gorm.Model
,包括字段ID
,CreatedAt
,UpdatedAt
,DeletedAt
,你可以將它嵌入你的模型,或者只寫你想要的字段
// 基本模型的定義 type Model struct { ID uint `gorm:"primary_key"` CreatedAt time.Time UpdatedAt time.Time DeletedAt *time.Time } // 添加字段 `ID`, `CreatedAt`, `UpdatedAt`, `DeletedAt` type User struct { gorm.Model Name string } // 只需要字段 `ID`, `CreatedAt` type User struct { ID uint CreatedAt time.Time Name string }
2.2. 表名是結構體名稱的復數形式
type User struct {} // 默認表名是`users` // 設置User的表名為`profiles` func (User) TableName() string { return "profiles" } func (u User) TableName() string { if u.Role == "admin" { return "admin_users" } else { return "users" } } // 全局禁用表名復數 db.SingularTable(true) // 如果設置為true,`User`的默認表名為`user`,使用`TableName`設置的表名不受影響
2.3. 更改默認表名
您可以通過定義DefaultTableNameHandler
對默認表名應用任何規則。
gorm.DefaultTableNameHandler = func (db *gorm.DB, defaultTableName string) string { return "prefix_" + defaultTableName; }
2.4. 列名是字段名的蛇形小寫
type User struct { ID uint // 列名為 `id` Name string // 列名為 `name` Birthday time.Time // 列名為 `birthday` CreatedAt time.Time // 列名為 `created_at` } // 重設列名 type Animal struct { AnimalId int64 `gorm:"column:beast_id"` // 設置列名為`beast_id` Birthday time.Time `gorm:"column:day_of_the_beast"` // 設置列名為`day_of_the_beast` Age int64 `gorm:"column:age_of_the_beast"` // 設置列名為`age_of_the_beast` }
2.5. 字段ID為主鍵
type User struct { ID uint // 字段`ID`為默認主鍵 Name string } // 使用tag`primary_key`用來設置主鍵 type Animal struct { AnimalId int64 `gorm:"primary_key"` // 設置AnimalId為主鍵 Name string Age int64 }
2.6. 字段CreatedAt用于存儲記錄的創建時間
創建具有CreatedAt
字段的記錄將被設置為當前時間
db.Create(&user) // 將會設置`CreatedAt`為當前時間 // 要更改它的值, 你需要使用`Update` db.Model(&user).Update("CreatedAt", time.Now())
2.7. 字段UpdatedAt用于存儲記錄的修改時間
保存具有UpdatedAt
字段的記錄將被設置為當前時間
db.Save(&user) // 將會設置`UpdatedAt`為當前時間 db.Model(&user).Update("name", "jinzhu") // 將會設置`UpdatedAt`為當前時間
2.8. 字段DeletedAt用于存儲記錄的刪除時間,如果字段存在
刪除具有DeletedAt
字段的記錄,它不會沖數據庫中刪除,但只將字段DeletedAt
設置為當前時間,并在查詢時無法找到記錄,請參閱[軟刪除]
原文鏈接:https://www.cnblogs.com/guyouyin123/p/14109877.html
相關推薦
- 2022-07-04 python數據分析matplotlib的基礎繪圖使用_python
- 2022-04-28 C/C++的關鍵字之static你了解嗎_C 語言
- 2023-02-01 Python繪制正二十面體圖形示例_python
- 2023-02-23 GO中的條件變量sync.Cond詳解_Golang
- 2022-06-07 教你使用Jenkins集成Harbor自動發布鏡像_docker
- 2022-05-12 centos7.6升級glibcln: relocation error: /lib64/libc
- 2022-03-14 flutter The argument type ‘String?‘ can‘t be assig
- 2022-08-04 python實現凱撒密碼加密解密的示例代碼_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支