wxfsuzhou 2019-04-02
上节内容我们学习了基本的xorm框架的知识和基础配置的相关信息。本节课内容我们继续学习相关的知识和相关操作。
名称映射规则
名称映射规则主要负责结构体名称到表名和结构体field到表字段的名称映射。
在xorm框架中由core.IMapper接口的实现者来管理,xorm内置了三种IMapper实现:core.SnakeMapper,core.SameMapper和core.GonicMapper。
默认的名称映射规则为SnakeMapper,如果开发者需要改变时,可以使用创建的数据库引擎对象进行如下设置:
engine.SetMapper(core.SameMapper{})
另外,可以设置表名和表字段分别为不同的映射规则:
engine.SetTableMapper(core.SameMapper{}) engine.SetColumnMapper(core.SnakeMapper{})
使用Tag的映射规则
如果所有的命名都是按照IMapper的映射来操作的,那当然是最理想的。但是如果碰到某个表名或者某个字段名跟映射规则不匹配时,我们就需要别的机制来改变。
xorm提供了如下几种方式来进行:
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 Keyname当前field对应的字段的名称pk是否是Primary Keyautoincr是否是自增[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 ConversionTextint, int8, int16, int32, uint, uint8, uint16, uint32Intint64, uint64BigIntfloat32Floatfloat64Doublecomplex64, complex128Varchar(64)[]uint8Blobarray, slice, map except []uint8TextboolBoolstringVarchar(255)time.TimeDateTimecascade structBigIntstructTextOthersText
表基本操作
基本和统计操作
查询和统计主要使用Get, Find, Count, Rows, Iterate这几个方法,以及条件查询Where。
具体的编程使用方法我们在视频和程序中会给大家详细使用,这是我们实战项目的重点内容。