您的位置:首页 > 数据库 > SQL

beego框架之orm模块——mysql

2015-06-30 13:54 781 查看
  参考beego原文:http://beego.me/docs/mvc/model/orm.md#main.go

  beego ORM 是一个强大的 Go 语言 ORM 框架,orm模块主要是处理MVC中的M(models)。

  首先以bee工具创建一工程名为:beegoorm,修改的文件为 beegoorm/main.go 和 beegoorm/models/models.go(仅2个文件)

beegoorm/models/models.go

package models

import (
"github.com/astaxie/beego/orm"
)

type User struct {
Id          int
Name    string
Profile *Profile `orm:"rel(one)"` // OneToOne relation
}

type Profile struct {
Id     int
Age  int16
User *User `orm:"reverse(one)"` // 设置反向关系(可选)
}

func init() {
// 需要在 init 中注册定义的 model
orm.RegisterModel(new(User), new(Profile))
}


beegoorm/main.go

package main

import (
"beegoorm/models"
"fmt"
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"

_ "beegoorm/routers"
_ "github.com/go-sql-driver/mysql"
)

func init() {
// 注册驱动
orm.RegisterDriver("mysql", orm.DR_MySQL)
// 注册默认数据库
// 我的mysql的root用户密码为tom,打算把数据表建立在名为test数据库里
// 备注:此处第一个参数必须设置为“default”(因为我现在只有一个数据库),否则编译报错说:必须有一个注册DB的别名为 default
orm.RegisterDataBase("default", "mysql", "root:tom@/test?charset=utf8")
}

func main() {
// 开启 orm 调试模式:开发过程中建议打开,release时需要关闭
orm.Debug = true
// 自动建表
orm.RunSyncdb("default", false, true)

// 创建一个 ormer 对象
o := orm.NewOrm()
o.Using("default")
perfile := new(models.Profile)
perfile.Age = 30

user := new(models.User)
user.Name = "tom"
user.Profile = perfile

// insert
o.Insert(perfile)
o.Insert(user)
o.Insert(perfile)
o.Insert(user)
o.Insert(perfile)
o.Insert(user)

// update
user.Name = "hezhixiong"
num, err := o.Update(user)
fmt.Printf("NUM: %d, ERR: %v\n", num, err)

// delete
o.Delete(&models.User{Id: 2})

beego.Run()
}


数据库建表及数据增删改的结果如下:
数据库名:test
数据表:user,profile
user表 profile表





2015/07/02 追记:

  在models模块里,被注册的struct与数据库里的表会以一种默认方式进行一一对应。然而,在实际开发中,默认的这种映射关系并不是我们所期待的,所以我们需要指定被注册的struct与数据库里的表之间的关系。

type User struct{    // 默认情况对应数据库的表名为:user
MyName  string    // 默认情况对应数据库里user表字段为:my_name
MyAge   string    // 默认情况对应数据库里user表字段为:my_age
}
orm.RegisterModel(new(User))

新的需求:结构体名为User对应数据库的表名为:test_user
MyName的成员对应数据库的字段名为:MyName
MyAge的成员对应数据库的字段名为:MyAge
那么该User的结构体又该如何定义呢?

新需求的User结构体:
type User struct{
MyName  string `orm:"column(MyName)"`
MyAge   string `orm:"column(MySex)"`
}
orm.RegisterModel(new(User))

// 自定义表名(系统自动调用)
func (u *User) TableName() string {
return "test_user"
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: