模型定義
模型是標準的結構體,由go的基本資料型別、實現了scanner和valuer介面的自定義型別及其指標或別名組成
例如:
type user struct
約定gorm 傾向於約定,而不是配置。預設情況下,gorm 使用id
作為主鍵,使用結構體名的蛇形複數
作為表名,欄位名的蛇形
作為列名,並使用createdat
、updatedat
字段追蹤建立、更新時間
遵循 gorm 已有的約定,可以減少您的配置和**量。
gorm 定義乙個gorm.model
結構體,其包括字段id
、createdat
、updatedat
、deletedat
// gorm.model 的定義type model struct
您可以將它嵌入到您的結構體中,以包含這幾個字段,詳情請參考 嵌入結構體
可匯出的字段在使用 gorm 進行 crud 時擁有全部的許可權,此外,gorm 允許您用標籤控制字段級別的許可權。這樣您就可以讓乙個欄位的許可權是唯讀、只寫、只建立、只更新或者被忽略
注意:使用 gorm migrator 建立表時,不會建立被忽略的字段
type user struct
自定義基礎模型:id、created、updated、deleted
type basemodel struct
對於正常的結構體欄位,你也可以通過標籤embedded
將其嵌入,並且,您可以使用標籤embeddedprefix
來為 db 中的欄位名新增字首,例如:
type author structtype user struct
字段標籤
宣告 model 時,tag 是可選的,gorm 支援以下 tag: tag 名大小寫不敏感,但建議使用camelcase
風格
標籤名說明
column
指定 db 列名
type
列資料型別,推薦使用相容性好的通用型別,例如:所有資料庫都支援 bool、int、uint、float、string、time、bytes 並且可以和其他標籤一起使用,例如:not null
、size
,autoincrement
… 像varbinary(8)
這樣指定資料庫資料型別也是支援的。在使用指定資料庫資料型別時,它需要是完整的資料庫資料型別,如:mediumint unsigned not null auto_increment
size
指定列大小,例如:size:256
primarykey
指定列為主鍵
unique
指定列為唯一
default
指定列的預設值
precision
指定列的精度
scale
指定列大小
not null
指定列為 not null
autoincrement
指定列為自動增長
autoincrementincrement
自動步長,控制連續記錄之間的間隔
embedded
巢狀字段
embeddedprefix
嵌入欄位的列名字首
autocreatetime
建立時追蹤當前時間,對於int
字段,它會追蹤秒級時間戳,您可以使用nano
/milli
來追蹤納秒、毫秒時間戳,例如:autocreatetime:nano
autoupdatetime
建立/更新時追蹤當前時間,對於int
字段,它會追蹤秒級時間戳,您可以使用nano
/milli
來追蹤納秒、毫秒時間戳,例如:autoupdatetime:milli
index
根據引數建立索引,多個字段使用相同的名稱則建立復合索引,檢視 索引 獲取詳情
uniqueindex
與index
相同,但建立的是唯一索引
check
建立檢查約束,例如check:age > 13
,檢視 約束 獲取詳情
<-
設定字段寫入的許可權,<-:create
只建立、<-:update
只更新、<-:false
無寫入許可權、<-
建立和更新許可權
->
設定欄位讀的許可權,->:false
無讀許可權
-忽略該欄位,-
無讀寫許可權
comment
遷移時為字段新增注釋
gorm快速使用
模型 為表中的字段,記得欄位名開頭大寫 type patient struct 此例為postgresql func main 不重新建立複數結尾的表,還是原來的表,可以利用原表中的結構,資料 db.singulartable true defer db.close 建立 patient db.cr...
封裝 實戰gorm
gorm以物件導向的編碼方式對資料庫讀寫操作進行了封裝,將每乙個資料實體當作乙個結構體 類 進行處理。本片文章從實際開發中所遇問題和新的需求,對gorm進行一次封裝,以此加快開發速度。首先介紹 架構 component db.go model.go test.go include container...
GORM 開發例項
用 hql 的方式,這種方式好處是可以新增 distinct transactional readonly true compiledynamic collection listvlogofallsubspecials int offset 0,int max 10 用 criteria 的方式,這...