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, uint64 | BigInt | |
float32 | Float | |
float64 | Double | |
complex64, complex128 | json.Marshal / json.UnMarshal | Varchar(64) |
[]uint8 | Blob | |
array, slice, map except []uint8 | json.Marshal / json.UnMarshal | Text |
bool | 1 or 0 | Bool |
string | Varchar(255) | |
time.Time | DateTime | |
cascade struct | primary key field value | BigInt |
struct | json.Marshal / json.UnMarshal | Text |
Others | Text |
Xorm 进行名称映射时,可以指定前后缀等特性。这些映射规则包括:前缀映射,后缀映射和缓存映射。 1. 前缀映射通过 core.NewPrefixMapper(core.SnakeMapper{}, "p ...