## 一、模型名和表名映射
1.模型名和表名的映射规则:除了开头的大写字母以外,遇到大写会增加 \_,原名称中的下划线保留。
* Article -> article
* AuthUser -> auth_user
* Auth\_User -> auth__user 两个下划线
* DB\_AuthUser -> d\_b\_\_auth\_user
2.自定义表名
~~~
type User struct {
Id int
Name string
}
//自定义表名
func (u *User) TableName() string {
return "auth_user"
}
~~~
## 二、设置参数:使用structtag
1.忽略字段structtag:`orm:"-"`
2.pk设置为主键,适用于自定义其他类型为主键
3.null:Name string`orm:"null"`
4.auto:自增长
~~~
Id int `orm:"pk;auto"`
~~~
5.index:索引
~~~
Name string `orm:"index"`
~~~
索引的作用:优化查询,相当于图书的目录
6.unique
~~~
Name string `orm:"unique"`
~~~
7.column
重写数据库字段的别名
~~~
Name string `orm:"column(user_name)"`
~~~
~~~
type User struct {
ID uint // 字段名是 `id`
Name string // 字段名是 `name`
Birthday time.Time // 字段名是 `birthday`
CreatedAt time.Time // 字段名是 `created_at`
Groupss int `orm:"column(groups_id)"`// 字段名是 `groups_id`
}
~~~
8.size:对string起作用
~~~
Title string `orm:"size(60)"`
~~~
9.digits / decimals 4 2 12.21
~~~
Money float64 `orm:"digits(12);decimals(4)"` 总长度12,小数点后有4位小数
~~~
10.auto\_now / auto\_now\_add
~~~
// 时间
Created time.Time `orm:"auto_now_add;type(datetime)"`
Updated time.Time `orm:"auto_now;type(datetime)"`
// 日期
Created time.Time `orm:"auto_now_add;type(date)"`
Updated time.Time `orm:"auto_now;type(date)"`
~~~
auto\_now 每次 model 保存时都会对时间自动更新
auto\_now\_add 第一次保存时才设置时间
11.type:日期还是时间
~~~
Created time.Time `orm:"auto_now_add;type(date)"`
Created time.Time `orm:"auto_now_add;type(datetime)"`
~~~
12.default
~~~
Gender float64 `orm:"default(0)"`
~~~
13.description
修改源码:cmd\_utils.go的 getColumnAddQuery()最后加:fi.description,
~~~
Name string `orm:"description(这是标签名称)"`
~~~