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"`