上节内容我们学习了基本的xorm框架的知识和基础配置的相关信息。本节课内容我们继续学习相关的知识和相关操作。

名称映射规则

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

  • SnakeMapper:支持struct为驼峰式命名,表结构中为下划线命名之间的转换。该种规则为xorm默认的Maper;

  • SameMapper:映射规则支持结构体名称和对应的表名称以及结构体field名称与对应的表字段名称相同的命名;

  • GonicMapper:该映射规则和驼峰式命名类似,但是对于特定词支持性更好,比如ID将会翻译成id,而不是驼峰式的i_d。

默认的名称映射规则为SnakeMapper,如果开发者需要改变时,可以使用创建的数据库引擎对象进行如下设置:

engine.SetMapper(core.SameMapper{})

另外,可以设置表名和表字段分别为不同的映射规则:

engine.SetTableMapper(core.SameMapper{})
engine.SetColumnMapper(core.SnakeMapper{})

使用Tag的映射规则

如果所有的命名都是按照IMapper的映射来操作的,那当然是最理想的。但是如果碰到某个表名或者某个字段名跟映射规则不匹配时,我们就需要别的机制来改变。 xorm提供了如下几种方式来进行:

  • 如果结构体拥有TableName() string的成员方法,那么此方法的返回值即是该结构体对应的数据库表名。

  • 通过engine.Table()方法可以改变struct对应的数据库表的名称,通过sturct中field对应的Tag中使用xorm:"'column_name'"可以使该field对应的Column名称为指定名称。这里使用两个单引号将Column名称括起来是为了防止名称冲突,因为我们在Tag中还可以对这个Column进行更多的定义。如果名称不冲突的情况,单引号也可以不使用。

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。

具体的编程使用方法我们在视频和程序中会给大家详细使用,这是我们实战项目的重点内容。

go培训课程都学什么?xorm框架学习系列(二):xorm结构体映射规则和表操作的更多相关文章

  1. 2.VUE前端框架学习记录二

    VUE前端框架学习记录二:Vue核心基础2(完结)文字信息没办法描述清楚,主要看编码实战里面,有附带有一个完整可用的Html页面,有需要的同学到脑图里面自取.脑图地址http://naotu.baid ...

  2. thinkphp学习笔记1—目录结构和命名规则

    原文:thinkphp学习笔记1-目录结构和命名规则 最近开始学习thinkphp,在下不才,很多的问题看不明白所以想拿出来,恕我大胆发在首页上,希望看到的人能为我答疑解惑,这样大家有个互动,学起来快 ...

  3. scrapy爬虫学习系列二:scrapy简单爬虫样例学习

    系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备:      http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...

  4. matlab学习笔记12_3串联结构体,按属性创建含有元胞数组的结构体,filenames,isfield,isstruct,orderfields

    一起来学matlab-matlab学习笔记12 12_3 结构体 串联结构体,按属性创建含有元胞数组的结构体,filenames,isfield,isstruct,orderfields 觉得有用的话 ...

  5. 图机器学习(GML)&图神经网络(GNN)原理和代码实现(前置学习系列二)

    项目链接:https://aistudio.baidu.com/aistudio/projectdetail/4990947?contributionType=1 欢迎fork欢迎三连!文章篇幅有限, ...

  6. MyBatis学习系列二——增删改查

    目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...

  7. MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存

    目录(?)[-] 二SQL语句映射文件2增删改查参数缓存 select insert updatedelete sql parameters 基本类型参数 Java实体类型参数 Map参数 多参数的实 ...

  8. MyBatis学习 之 二、SQL语句映射文件(1)resultMap

    目录(?)[-] 二SQL语句映射文件1resultMap resultMap idresult constructor association联合 使用select实现联合 使用resultMap实 ...

  9. [转]ASP.NET MVC学习系列(二)-WebAPI请求 传参

    [转]ASP.NET MVC学习系列(二)-WebAPI请求 传参 本文转自:http://www.cnblogs.com/babycool/p/3922738.html ASP.NET MVC学习系 ...

随机推荐

  1. C#返回Json,js解析Json,并添加到select标签中

    后台: List<Student> list=GetAll();//id name string json = new JavaScriptSerializer().Serialize(l ...

  2. IIS 高并发导致log记录不完全

    项目测试性能过程中,对于高并发测试过程中发现log记录缺失一部分,经过调查,找到了原因是因为IIS连接数的限制,经过修改连接数,成功完成.设置如下: “点击网站”->“右击切换到功能视图”-&g ...

  3. java事务(一)——事务特性

    事务 什么是事务?事务通俗的讲就是要做的事,在计算机术语中一般指访问或更新数据库中数据的一个工作单元.说起事务,那么就要提到事务的ACID特性,即原子性(atomicity).一致性(consiste ...

  4. php实现多文件上传和下载。

    http://1229363.blog.163.com/blog/static/19743427200751291055264/

  5. .net Core 2.1 MVC+EF+Redis搭建

    官方学习资料 搭建空MVC框架 1.创建一个空模板 2.创建文件夹 Controllers.Models.Views 3.在Controllers文件夹下创建HomeController.cs 选择C ...

  6. 1143. Lowest Common Ancestor (30)

    The lowest common ancestor (LCA) of two nodes U and V in a tree is the deepest node that has both U ...

  7. JS undefined

    undefined表示"缺少值",就是此处应该有一个值,但是还没有定义.典型用法是: (1)变量被声明了,但没有赋值时,就等于undefined. (2) 调用函数时,应该提供的参 ...

  8. bzoj 4823 & 洛谷 P3756 老C的方块 —— 最小割

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4823 https://www.luogu.org/problemnew/show/P3756 ...

  9. 【转】 Pro Android学习笔记(四四):Dialog(1):触发Dialog

    目录(?)[-] 创建dialog fragment Activity显示对话框 Android提供alert.prompt.pick-list,单选.多选,progress.time-picker和 ...

  10. MyBatis动态传入表名,字段名参数的解决办法---statementType用法

    statementType="STATEMENT" 要实现动态传入表名.列名,需要做如下修改 添加属性statementType="STATEMENT" 同时s ...