go培訓課程都學什麼?xorm框架學習系列(二):xorm結構體映射規則和表操做

上節內容咱們學習了基本的xorm框架的知識和基礎配置的相關信息。本節課內容咱們繼續學習相關的知識和相關操做。數據庫

名稱映射規則

名稱映射規則主要負責結構體名稱到表名和結構體field到表字段的名稱映射。 在xorm框架中由core.IMapper接口的實現者來管理,xorm內置了三種IMapper實現:core.SnakeMapper,core.SameMappercore.GonicMapper編程

  • SnakeMapper:支持struct爲駝峯式命名,表結構中爲下劃線命名之間的轉換。該種規則爲xorm默認的Maper;json

  • SameMapper:映射規則支持結構體名稱和對應的表名稱以及結構體field名稱與對應的表字段名稱相同的命名;bash

  • GonicMapper:該映射規則和駝峯式命名相似,可是對於特定詞支持性更好,好比ID將會翻譯成id,而不是駝峯式的i_d。app

默認的名稱映射規則爲SnakeMapper,若是開發者須要改變時,可使用建立的數據庫引擎對象進行以下設置:框架

engine.SetMapper(core.SameMapper{})複製代碼

另外,能夠設置表名和表字段分別爲不一樣的映射規則:學習

engine.SetTableMapper(core.SameMapper{})
engine.SetColumnMapper(core.SnakeMapper{})複製代碼

使用Tag的映射規則

若是全部的命名都是按照IMapper的映射來操做的,那固然是最理想的。可是若是碰到某個表名或者某個字段名跟映射規則不匹配時,咱們就須要別的機制來改變。 xorm提供了以下幾種方式來進行:ui

  • 若是結構體擁有TableName() string的成員方法,那麼此方法的返回值便是該結構體對應的數據庫表名。spa

  • 經過engine.Table()方法能夠改變struct對應的數據庫表的名稱,經過sturct中field對應的Tag中使用xorm:"'column_name'"可使該field對應的Column名稱爲指定名稱。這裏使用兩個單引號將Column名稱括起來是爲了防止名稱衝突,由於咱們在Tag中還能夠對這個Column進行更多的定義。若是名稱不衝突的狀況,單引號也能夠不使用。翻譯

Column屬性定義

咱們在field對應的Tag中對Column的一些屬性進行定義,用於對咱們的項目中的數據庫表字段進行設置和限定。定義的方法基本和咱們寫SQL定義表結構相似。以下所示:

type User struct {
    Id   int64
    Name string  `xorm:"varchar(25) notnull unique 'usr_name'"`
}複製代碼

xorm中對數據類型有本身的定義,具體的Tag規則以下,另Tag中的關鍵字均不區分大小寫:

name 當前field對應的字段的名稱
pk 是不是Primary Key
name 當前field對應的字段的名稱
pk 是不是Primary Key
autoincr 是不是自增
[not ]null 或 notnull 是否能夠爲空
unique 是不是惟一
index 是不是索引

| 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格式 |

字段映射規則

除了上述表名的映射規則和使用Tag對字段進行設置之外,基礎的Go語言結構體數據類型也會對應到數據庫表中的字段中,具體的一些數據類型對應規則以下:

Go語言數據類型 xorm 中的類型
implemented Conversion Text
int, int8, int16, int32, uint, uint8, uint16, uint32 Int
int64, uint64 BigInt
float32 Float
float64 Double
complex64, complex128 Varchar(64)
[]uint8 Blob
array, slice, map except []uint8 Text
bool Bool
string Varchar(255)
time.Time DateTime
cascade struct BigInt
struct Text
Others Text

表基本操做

  • 建立表:CreateTables(),參數爲一個或多個空的對應Struct的指針。

  • 判斷表是否爲空:IsTableEmpty()

  • 判斷表是否存在:IsTableExist()

  • 刪除表:DropTables(),參數爲一個或多個空的對應Struct的指針或者表的名字。

基本和統計操做

查詢和統計主要使用Get, Find, Count, Rows, Iterate這幾個方法,以及條件查詢Where。

具體的編程使用方法咱們在視頻和程序中會給你們詳細使用,這是咱們實戰項目的重點內容。

相關文章
相關標籤/搜索