上节内容咱们学习了基本的xorm框架的知识和基础配置的相关信息。本节课内容咱们继续学习相关的知识和相关操做。数据库
名称映射规则主要负责结构体名称到表名和结构体field到表字段的名称映射。 在xorm框架中由core.IMapper接口的实现者来管理,xorm内置了三种IMapper实现:core.SnakeMapper,core.SameMapper和core.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{})复制代码
若是全部的命名都是按照IMapper的映射来操做的,那固然是最理想的。可是若是碰到某个表名或者某个字段名跟映射规则不匹配时,咱们就须要别的机制来改变。 xorm提供了以下几种方式来进行:ui
若是结构体拥有TableName() string的成员方法,那么此方法的返回值便是该结构体对应的数据库表名。spa
经过engine.Table()方法能够改变struct对应的数据库表的名称,经过sturct中field对应的Tag中使用xorm:"'column_name'"可使该field对应的Column名称为指定名称。这里使用两个单引号将Column名称括起来是为了防止名称冲突,由于咱们在Tag中还能够对这个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。
具体的编程使用方法咱们在视频和程序中会给你们详细使用,这是咱们实战项目的重点内容。