beego mysql主从_beego框架之orm模块——mysql

参考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

48304ba5e6f9fe08f3fa1abda7d326ab.png

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))

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

beegoorm/main.go

48304ba5e6f9fe08f3fa1abda7d326ab.png

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()

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

数据库建表及数据增删改的结果如下:

数据库名:test

数据表:user,profile

user表                                                                                  profile表

08fad8c2c8c5a6d0aecb0b440635304b.gif        

85db6fec88903fa0d3389bf9154e6983.gif

2015/07/02 追记:

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

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"

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值