Xorm 名称映射规则

xorm 支持将一个 struct 映射为数据库中对应的一张表。

名称映射规则主要负责结构体名称到表名和结构体 field 到表字段的名称映射。由 core.IMapper 接口的实现者来管理,xorm内置了三种IMapper实现:core.SnakeMapper,core.SameMapper和core.GonicMapper。

  • SnakeMapper 支持 struct 为驼峰式命名,表结构为下划线命名之间的转换,这个是默认的 Maper;
  • SameMapper 支持结构体名称和对应的表名称以及结构体 field 名称与对应的表字段名称相同的命名;
  • GonicMapper 和 SnakeMapper 很类似,但是对于特定词支持更好,比如ID会翻译成 id 而不是 i_d。

当前SnakeMapper为默认值,如果需要改变时,在engine创建完成后使用

engine.SetMapper(core.SameMapper{})

同时需要注意的是:

  • 如果你使用了别的命名规则映射方案,也可以自己实现一个IMapper。
  • 表名称和字段名称的映射规则默认是相同的,当然也可以设置为不同,如:
engine.SetTableMapper(core.SameMapper{})
engine.SetColumnMapper(core.SnakeMapper{})

当一个结构体自动映射到数据库的表时,下面的表描述了它们是如何相互转换的:

go类型 值方法 xorm类型
implemented Conversion Conversion.ToDB / Conversion.FromDB Text
int, int8, int16, int32, uint, uint8, uint16, uint32 Int
int64, uint64BigInt
float32Float
float64Double
complex64, complex128 json.Marshal / json.UnMarshal Varchar(64)
[]uint8Blob
array, slice, map except []uint8 json.Marshal / json.UnMarshal Text
bool1 or 0Bool
stringVarchar(255)
time.TimeDateTime
cascade structprimary key field valueBigInt
structjson.Marshal / json.UnMarshalText
Others Text

Xorm 进行名称映射时,可以指定前后缀等特性。这些映射规则包括:前缀映射,后缀映射和缓存映射。 1. 前缀映射通过 core.NewPrefixMapper(core.SnakeMapper{}, "p ...