orm对象关系映射,通过对象(即struct)与数据库的table一一对应
1.关系设置
package main
import(
"github.com/astaxie/beego/orm"
_ "github.com/go-sql-driver/mysql"
)
type Child struct{
Id int
Name string
Born *Born `orm:"rel(one)"`//1 -1
Relatives []*Relative `orm:"reverse(many)"`//1-n Relative表体现
Parents []*Parent `orm:"rel(m2m)"`//n-n 中介表体现
}
type Relative struct{
Id int
Relation string
Child *Child `orm:"rel(fk)"`//1-n
}
type Born struct {
Id int
Hospital string
Num int//出生证明编号
Child *Child `orm:"reverse(one)"`//1-1
}
type Parent struct {
Id int
Work string
Childs []*Child `orm:"reverse(many)"`// n-n
}
func main(){
orm.RegisterDataBase("default","mysql","root:123456@tcp(192.168.160.140:3306)/pyg")
orm.RegisterModel(new(Child),new(Relative),new(Born),new(Parent))
orm.RunSyncdb("default",false,true)
}
2.模型定义
2.1自定义表名
2.2自定义索引
2.3 自定义引擎
2.4 设置参数
多个设置间使用 ;
分隔,设置的值如果是多个,使用 ,
分隔.
`orm:"null;rel(fk)"`
`orm:"-"`//忽略字段
`orm:"auto"`
`orm:"pk"`
`orm:"null"`
`orm:"index"`
`orm:"unique"`
`orm:"size(60)"`
`orm:"default(1)"`
`orm:"default(1);description(这是状态字段)" `
type
Created time.Time `orm:"auto_now_add;type(date)"`
Created time.Time `orm:"auto_now_add;type(datetime)"`
Created time.Time `orm:"auto_now_add;type(datetime)"`
Updated time.Time `orm:"auto_now;type(datetime)"`
Money float64 `orm:"digits(12);decimals(4)"`
表关系设置:1-1
`orm:"null;rel(one);on_delete(set_null)"` VS `orm:"reverse(one)"`
1-n
`orm:"rel(fk)"` (在弱势一方,即设置外键) VS `orm:"reverse(many)"`(强势一方)
n-n
`orm:"rel(m2m)"` VS `orm:"reverse(many)"`
on_delete 设置对应的 rel 关系删除时,如何处理关系字段:
cascade 级联删除(默认值)
set_null 设置为 NULL,需要设置 null = true
set_default 设置为默认值,需要设置 default 值
do_nothing 什么也不做,忽略
模型字段与数据库类型的对应
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(char) 时 | char(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) |