golang数据库编程(gorm版)(二)

之前简介了gorm如何对mysql中的表数据如何增删改查。这里主要介绍一下gorm的模型描述。

什么是模型?举个简单的例子,在售楼部,售楼部的营业员,在给客人讲解小区规划和户型的时候,通常会在售楼中心一个将小区缩小数倍后,跟小区形状很相似的沙盘模型给你讲解。这是小区和房屋的模型。而在科研类的领域里面,原物本身就没有实体,那该如何建立它的模型呢?

无论是小区还是房屋,之所以能够建立它的模型,是因为我们将小区或者房屋的形状中的关键点给记录下来,比如大楼外墙的颜色,长、宽、高、层数窗户、门的数量,及其分别所在位置等。有了这些数据,我们按照既定的比例,使用一些适用建模的材料,就可以制作出对应比例的模型出来。数据库虽然没有实体,但也有其特征点。比如每个数据库中,有表、视图、索引、主键、外键等元素,每张表中,有若干个字段,每个字段,其类型也是在固定范围中的某一种,数据库还有名称、表名称、字段名称等元素。诸如此类等等,这些都是我们建立数据库模型的依据。

在go语言中,定义字段时,如果是小写开头,则该字段为私有属性,不可被外部访问,只有首字母为大写的字段,才可被外部定义的变量,才可被外部访问。而数据库中的表名、字段名,在go模型中如何定义才能被正确接收呢?go语言为我们提供了一种解决方案,就是在定义变量的时候,可以额外的为其打上标签,即使标签为go的关键字,也可以被正确解析。例如:

type Order struct {
	Id               int64     `gorm:"column:id;primaryKey;autoIncrement"`	
	OrderId          string    `gorm:"column:order_id;type:varchar(50)"`        //订单号
	ContactName      string    `gorm:"column:contact_name;type:varchar(200)"`      //联系人姓名
	ContactAreaCode  string    `gorm:"column:contact_area_code;type:varchar(20)"`  //联系人电话区号,若未提供则默认86
	ContactPhone     string    `gorm:"column:contact_phone;type:varchar(50)"`      //联系人电话
	ContactEmail     string    `gorm:"column:contact_email;type:varchar(50)"`      //联系人邮箱
	ContactAddress   string    `gorm:"column:contact_address;type:varchar(200)"`   //联系人地址
	ContactPostCode  string    `gorm:"column:contact_post_code;type:varchar(20)"`  //联系人邮编
	Status           string    `gorm:"column:status;type:varchar(20)"`             //订单状态。占座中|占座成功|占座失败|支付中|支付成功|支付失败|出票成功|出票失败|已取消
	Async            int       `gorm:"column:async;type:int"`                      //是否异步。1:异步;0:同步
	Remarks          string    `gorm:"column:remarks;type:varchar(4000);NULL"`     //订单备注信息,占座失败,或者出票失败,可以用来记录原因
	CreateTime       time.Time `gorm:"column:create_time;type:datetime"`           //记录创建时间
	UpdateTime       time.Time `gorm:"column:update_time;type:datetime"`           //记录更新时间
}

在上述示例中,变量的标签定义是放在每个变量类型之后的部分。以'`'(注:不是单引号',而是键盘左上区'1'左边的`键)开头,同时以'`'结束,中间不可再出现'`'。在go中,标签不止可以用来描述gorm对应的数据模型内容,也可以用来描述json、orm、ymal等多种模型内容,甚至可以放在一起分别描述不同模型的内容。例如:

OrderId          string    `gorm:"column:order_id;type:varchar(50)" json:"orderId"` 

描述模型时,模型与模型之前用空格隔开,每个模型的开头是模型名称,比如gorm、orm、json等。模型名称后面用英语半角冒号隔开,模型的具体内容用双引号引起来。要描述的属性不止一个,则用英语半角';'隔开。

上面的OrderId这个变量,我们就理解为。在mysql中,它表示一个名称为order_id的字段,其类型为varchar(50),同时它表示为json时,在json数据中,字段名称为orderId。

详细的gorm标签用法,可以在其官网https://gorm.io/zh_CN/docs/models.html中查看。这里只介绍一些常用的标签。

  1. column 字段名称
  2. type 字段类型。其值与数据库中的基本保持一致。比如:varchar(200)、int(10)、datetime等
  3. autoIncrement 字段自增,通常用在主键id上面
  4. primaryKey 设定字段为主键
  5. comment 字段描述信息
  6. index 复合索引,多字段的索引名相同,则为复合索引
  7. uniqueIndex 惟一索引。

这里注意一下,在使用column、index关键字时,后面还得加上对应的字段名、索引名,比如:column:order_id;index:idx_order_id。但autoIncrement和primaryKey这两个关键字直接使用,不需要再接冒号,描述信息了。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值