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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM