go语言web开发17 - beego框架之go orm使用02 - orm模型名、字段名与数据库表名、表里字段名的对应关系

1orm模型的作用

  • 用作数据库数据转换和自动建表

 

2、模型名和表明的映射规则

开头的大写字母转换为小写,除了开头的大写字母以外,遇到大写会将大写转为小写并在前面增加 _,原名称中的下划线保留。具体看下表:

orm模型名 未指定表名的情况下自动建表后对应的表名
Article article
AuthUser auth_user
Auth_User auth__user (中间两个下划线)
DB_AuthUser d_b__auth_user

 

3、自定义表明

可以给模型绑定TableName方法自定义模型对应的表明,具体如下

type User struct {
  Id int
  Name string
}

func (u *User) TableName() string {
  return "auth_user"       // 这里返回的是自定义的表明
}

 

4、go orm模型的字段类型与MySQL表里的字段类型的对应关系

go模型里的字段类型
mysql表里的字段类型
int, int32-设置auto或者名称为Id
integer AUTO_INCREMENT
int64-设置auto或者名称为Id
bigint AUTO_INCREMENT
uint, uint32 - 设置 auto 或者名称为 Id
integer unsigned AUTO_INCREMENT
uint64 - 设置 auto 或者名称为 Id
bigint unsigned AUTO_INCREMENT
bool
bool
string - 默认为 size 255
varchar(size)
string - 设置 type(text)
longtext
time.Time-设置 type为date
date
time.Time
datetime
byte
tinyint unsigned
rune
integer
int
integer
int8
tinyint
int16
smallint
int32
integer
int64
bigint
uint
integer unsigned
uint8
tinyint unsigned
uint16
smallint unsigned
uint32
integer unsigned
uint64
bigint unsigned
float32
double precision
float64
double precision
float64 设置digits,decimals
numeric(digits, decimals)

 

 

5、模型字段与表字段映射

模型字段与数据库里表里字段的映射通过结构体tag来实现的,下面具体看下面示例:

(1)模型定义与结构体tag使用

// 1.定义模型
type User struct {
    Id int `orm:"pk;auto"`  // `orm:"pk"`:指定当前字段为主键。 `orm:"pk;auto"`:指定当前字段是主键(pk)且自动增长(auto),pk和auto基本都是同时使用的。
    Xxx int `orm:"-"`       // `orm:"-"`:忽略字段,此字段不会建到表里
    Name string `orm:"column(username);size(64)"` // `orm:"column(username)"`:指定模型里字段名对应表里的字段名
    Age  int `orm:"null;index"`   // `orm:"null"`:表示该字段允许为Null(默认不可以为null) 。 `orm:"index"`:在当前字段建索引(索引相当于书的目录,方便快速查找数据)
}

// 2.自定义模型对应的表明
func (u *User) TableName() string {
    return "sys_user"
}

// 3.注册模型
func init() {
    orm.RegisterModel(new(User))
}

 

(2)模型结构体tag说明

  • `orm:"pk;auto"`:指定当前字段是主键(pk)且自动增长(auto),pk和auto基本都是同时使用的(orm默认设置id字段为自增主键)。

  • `orm:"-"`:忽略当前字段,此字段不会建到表里

  • `orm:"column(username)"`:指定表里对应该该模型字段的字段名为username

  • `orm:"null"`:表示该字段允许为Null (默认:不允许为null)。

  • `orm:"index"`:在当前字段建索引(索引相当于书的目录,方便快速查找数据。没有索引时数据库会便利整个库里的数据(效率低))

  • `orm:"unique"`:给该字段指定唯一索引(当前字段的值必须是唯一的,不可以有两个同样的值插入该字段)

  • `orm:"size(64)"`:指定字段长度(只对varchar类型有效)

  • `orm:"digits(12);decimals(4)"`: 设置浮点类型精度:digits(12):指定字段总长度,decimals(4):小数占总长度的位数。结合起来的意思为:当前字段是小数字段,最长可以是12位(整数最多占8位,小数最多占4位,共12位)

  • `orm:"description(姓名)"`:给当前字段指定注解说明

  • `orm:"auto_now;type(date)"`:时间,参数说明:auto_now(随时可以修改的时间类型)、auto_now_add(第一次保存的时候设置的时间,后面不可以再更改的时间类型)、type(指定时间类型,date:日期、datetime:时间)

  • `orm:"default(默认值)"`:给该字段设置默认值

  • 说明:多个tag之间用分号(;)分割,可参考:`orm:"pk;auto"`

 

posted @ 2020-09-21 13:05  欧-阳  阅读(1348)  评论(0)    收藏  举报