zoukankan      html  css  js  c++  java
  • 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
    ", 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"
    }

     

  • 相关阅读:
    echarts设置y轴线的样式
    echarts基础配置信息?
    提高网站用户体验使网站更好发展的五大要点
    没有或很少有出站链接的网站存在致命的缺陷
    网络推广之百度知道推广技巧
    如何让百度3分钟内收录你的文章
    CSS强制换行
    如何提高网站在搜索引擎中的权重
    js闭包深入详解
    深入浅出之正则表达式
  • 原文地址:https://www.cnblogs.com/hezhixiong/p/4610234.html
Copyright © 2011-2022 走看看