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