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

 

最新文章

  1. 交叉编译中的build、host和target
  2. boost和std中的thread的引用参数
  3. Smarty基础
  4. gcc编译器基本命令和vi编辑器2
  5. 图形用户界面(graphical user interface)
  6. Winfrom 如何安全简单的跨线程更新控件
  7. C语言之三大查找算法
  8. LINUX编程学习笔记(十三) 遍历目录的两种方法
  9. LeanCloud获取最近会话列表和获取最后一条聊天记录
  10. Channel Allocation (poj 1129 dfs)
  11. JAVA实现同域单点登录
  12. PhpStorm服务激活
  13. Runtime "Apache Tomcat v6.0 (3)" is invalid. The JRE could not be found. Edit the server and change the JRE location解决方案
  14. Zoomit的用法总结
  15. js中 offset /client /scroll总结
  16. 20169207 《Linux内核原理与分析》第十一周作业
  17. 如何将SQL Server 2000备份的数据库文件还原(升级)为SQL Server 2005或更高版本的数据库?
  18. kernel下nand flash的文件系统总结
  19. 使用 Azure CLI 管理 Azure 虚拟网络和 Linux 虚拟机
  20. Paper Reading - Deep Captioning with Multimodal Recurrent Neural Networks ( m-RNN ) ( ICLR 2015 ) ★

热门文章

  1. jsp路径
  2. Oracle 数据库 回滚
  3. Docker(二):理解容器编排工具Kubernetes内部工作原理
  4. qt creator源码全方面分析(2-1)
  5. 本机链接虚拟机的mapreduce错误解决方法
  6. oracle的锁种类知识普及
  7. java数据域初始化
  8. HDU_5057_分块
  9. Python爬虫小结
  10. [RAC] 1. 安装Oracle RAC时,不能验证ASMSNMP密码问题的解决(ORA-01031或ORA-01017)