This repository has been archived on 2022-04-14. You can view files and clone it, but cannot push or open issues or pull requests.
manual-zh-CN/chapter-02/1.mapping.md
2020-03-24 09:23:34 +08:00

2.4 KiB
Raw Permalink Blame History

名称映射规则

跟名称相关的函数包含在 xorm.io/xorm/names 下。名称映射规则主要负责结构体名称到表名和结构体 field 到表字段的名称映射。由 names.Mapper 接口的实现者来管理xorm 内置了三种 Mapper 实现:names.SnakeMapper names.SameMappernames.GonicMapper

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

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

engine.SetMapper(names.GonicMapper{})

同时需要注意的是:

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

当结构体自动转换为对应的数据库类型时,小表显示了转换关系:

go type's kind value method xorm type
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