beego orm mysql

余生颓废 提交于 2020-02-20 04:37:05

beego框架中的rom支持mysql

项目中使用到mvc模式,总结下使用方式;

models中

package models

import (
    //使用beego orm 必备
    "github.com/astaxie/beego/orm"
    //使用的数据库 必备
    _ "github.com/go-sql-driver/mysql" // import your used driver
)

type BlogLogin struct {
    Id            int64
    Name          string
    Pwd           string
    WechatId      string
    WechatInfo    string
    CreateTime    string
    LastLoginIp   string
    LastLoginTime string
}

func RegisterDB() {

    //注册 model
    orm.RegisterModel(new(BlogLogin))
    //注册默认数据库
    orm.RegisterDataBase("default", "mysql", "username:password@/databasename?charset=utf8") //密码为空格式

当model创建了一个type ,在RegisterDB中调用该方法创建表

    //orm.RunSyncdb("default", false, true)

创建表结构案例

type User struct {
    Id          int
    Name        string
    Profile     *Profile   `orm:"rel(one)"` // OneToOne relation
    Post        []*Post `orm:"reverse(many)"` // 设置一对多的反向关系
}

type Profile struct {
    Id          int
    Age         int16
    User        *User   `orm:"reverse(one)"` // 设置一对一反向关系(可选)
}

type Post struct {
    Id    int
    Title string
    User  *User  `orm:"rel(fk)"`    //设置一对多关系
    Tags  []*Tag `orm:"rel(m2m)"`
}

type Tag struct {
    Id    int
    Name  string
    Posts []*Post `orm:"reverse(many)"`
}

然后main中初始化,创建表

package main

import (
    //调用models中registerDB方法注册
    "blog/models"
    //设置路由,必备
    _ "blog/routers"
    //beego控制器使用必备
    "github.com/astaxie/beego"
    //开启调试默认
    "github.com/astaxie/beego/orm"
)

func init() {
    models.RegisterDB()

}

func main() {
    orm.Debug = true
    beego.Run()
}

接下来在controller中使用

package controllers

import (
    //使用model中的类型BlogLogin
    "blog/models"
    //打印数据库查出来的结果
    "fmt"
    //beego控制器必备
    "github.com/astaxie/beego"
    //使用orm 中的查询方法
    "github.com/astaxie/beego/orm"
)

type AdminLoginController struct {
    beego.Controller
}

func (this *AdminLoginController) Get() {
    this.TplName = "AdminLogin.html"
}

func (this *AdminLoginController) Post() {

    name := this.Input().Get("name")
    pwd := this.Input().Get("pwd")

    o := orm.NewOrm()
    // read one
    login := models.BlogLogin{Name: name, Pwd: pwd}
    //read默认根据主键查询,下面我设置的为跟怒name 和pwd 查询
    err := o.Read(&login, "Name", "Pwd")
    if err != nil {
        fmt.Printf("ERR: %v\n", err)
        this.Redirect("/adminlogin.html", 301)
        return
    }
    fmt.Printf("Data: %v\n", login)
this.Redirect("/admin.html", 301)
    return
}

下面为一些标准的sql使用:

    // insert
    id, err := o.Insert(&user)
    fmt.Printf("ID: %d, ERR: %v\n", id, err)

    // update
    //user.Name = "astaxie"
    //num, err := o.Update(&user)
    //fmt.Printf("NUM: %d, ERR: %v\n", num, err)

    // read one
    //u := User{Id: user.Id}
    //err = o.Read(&u)
    //fmt.Printf("ERR: %v\n", err)

    // delete
    //num, err = o.Delete(&u)
    //fmt.Printf("NUM: %d, ERR: %v\n", num, err)

详情来自官网:https://beego.me/docs/mvc/model/orm.md

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!