gorm宣告模型

2022-09-19 05:21:10 字數 2616 閱讀 3220

模型定義

模型是標準的結構體,由go的基本資料型別、實現了scanner和valuer介面的自定義型別及其指標或別名組成

例如:

type user struct

約定gorm 傾向於約定,而不是配置。預設情況下,gorm 使用id作為主鍵,使用結構體名的蛇形複數作為表名,欄位名的蛇形作為列名,並使用createdatupdatedat字段追蹤建立、更新時間

遵循 gorm 已有的約定,可以減少您的配置和**量。

gorm 定義乙個gorm.model結構體,其包括字段idcreatedatupdatedatdeletedat

// 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 struct 

type user struct

字段標籤

宣告 model 時,tag 是可選的,gorm 支援以下 tag: tag 名大小寫不敏感,但建議使用camelcase風格

標籤名說明

column

指定 db 列名

type

列資料型別,推薦使用相容性好的通用型別,例如:所有資料庫都支援 bool、int、uint、float、string、time、bytes 並且可以和其他標籤一起使用,例如:not nullsize,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 的方式,這...