xorm之定義表結構體

2021-09-13 14:49:19 字數 2360 閱讀 2599

xorm支援將乙個struct對映為資料庫中對應的一張表。

var engine *xorm.engine

engine.

tablename

(new

(表結構體)

,true

)

xorm reverse mssql "server=192.168.133.133;database=arguse;user id=sa;password=123456;encrypt=disable" e:\go\gopath\src\github.com\go-xorm\cmd\xorm\templates\goxorm

engine.

})

同時需要注意的是:

表名稱和欄位名稱的對映規則預設是相同的,當然也可以設定不同,如:

例如:如果希望所有的表名都在結構體自動命名的基礎上加乙個字首而欄位名不加字首,則可以在engine建立完成之後執行一下語句。

執行之後,結構體type user struct預設對應的表名就變成了prefix_user了,而之前預設的是user

到此名稱對映的所有方法都給出了,一共三種方式,這三種是有優先順序順序的。

表名的優先順序順序如下:

欄位名的優先順序順序如下:

我們在field對應的tag中對column的一些屬性進行定義,定義的方法基本和我們寫sql定義表結構類似,比如:

type user struct

對於不同的資料庫系統,資料型別其實是有些差異的。因此xorm中對資料型別有自己的定義,基本的原則是盡量相容各種資料庫的字段型別,具體的字段對應關係可以檢視字段型別對應表。對於使用者,一般只要使用自己熟悉的資料庫字段定義即可。

具體的tag規則如下,另tag中的關鍵字均不區分大小寫,但欄位名根據不同的資料庫是區分大小寫:

name

當前field對應的字段的名稱,可選,如不寫,則自動根據field名字和轉換規則命名,如與其它關鍵字衝突,請使用單引號括起來。

pk是否是primary key,如果在乙個struct中有多個欄位都使用了此標記,則這多個字段構成了復合主鍵,單主鍵當前支援int32,int,int64,uint32,uint,uint64,string這7種go的資料型別,復合主鍵支援這7種go的資料型別的組合。

當前支援30多種字段型別,詳情參見本文最後乙個**

字段型別

autoincr

是否是自增

[not ]null 或 notnull

是否可以為空

unique或unique(uniquename)

是否是唯一,如不加括號則該字段不允許重複;如加上括號,則括號中為聯合唯一索引的名字,此時如果有另外乙個或多個欄位和本unique的uniquename相同,則這些uniquename相同的字段組成聯合唯一索引

index或index(indexname)

是否是索引,如不加括號則該字段自身為索引,如加上括號,則括號中為聯合索引的名字,此時如果有另外乙個或多個欄位和本index的indexname相同,則這些indexname相同的字段組成聯合索引

extends

應用於乙個匿名成員結構體或者非匿名成員結構體之上,表示此結構體的所有成員也對映到資料庫中,extends可載入無限級

-這個field將不進行字段對映

->

這個field將只寫入到資料庫而不從資料庫讀取

這個field將只從資料庫讀取,而不寫入到資料庫

created

這個field將在insert時自動賦值為當前時間

updated

這個field將在insert或update時自動賦值為當前時間

deleted

這個field將在delete時設定為當前時間,並且當前記錄不刪除

version

這個field將會在insert時預設為1,每次更新自動加1

default 0或default(0)

設定預設值,緊跟的內容如果是varchar等需要加上單引號

json

表示內容將先轉成json格式,然後儲存到資料庫中,資料庫中的字段型別可以為text或者二進位制

另外有如下幾條自動對映的規則:

type conversion inte***ce

原文地:

xorm結構體對映規則和表操作

上節內容我們學習了基本的xorm框架的知識和基礎配置的相關資訊。本節課內容我們繼續學習相關的知識和相關操作。另外,可以設定表名和表字段分別為不同的對映規則 我們在field對應的tag中對column的一些屬性進行定義,用於對我們的專案中的資料庫表字段進行設定和限定。定義的方法基本和我們寫sql定義...

xorm根據資料庫表生成對應的結構體

使用 golang 運算元據庫的同學都會遇到乙個問題 根據資料表結構建立對應的 struct 模型。因為 golang 的使用首字母控制可見範圍,我們經常要設計 struct 欄位名和資料庫欄位名的對應關係。久而久之,這是乙個非常繁瑣的過程。事情變得繁瑣了,我們都會想,有沒有好的辦法自動生成 mod...

結構體定義

struct在c語言中是乙個關鍵字,用於定義結構資料型別。問題中的兩種定義的區別在於第一種是給student資料型別,重新定義了乙個型別別名,而第二種則單純的表示一種叫做student的資料結構型別。兩者的主要區別在於後面直接定義變數時。如下 則可以直接在結構體後面定義乙個zhang san的結構體...