beego | ORM

下载:

go get github.com/astaxie/beego/orm
go get -u github.com/go-sql-drive/mysql

生成表

models/models.py

package models

import (
    "github.com/astaxie/beego/orm"
    _ "github.com/go-sql-driver/mysql"
)

type User struct {
    Id int
    Name string
    Age string
    Gender string
}

func init() {
    // 设置数据库的基本信息
    orm.RegisterDataBase("default", "mysql", "root:123456@tcp(127.0.0.1:3306)/gotest1?charset=utf8")
    // 映射model数据
    orm.RegisterModel(new(User))
    // 生成表
    orm.RunSyncdb("default",false, true)
}

在main.go中导入

package main

import (
    _ "blog/routers"
    _ "blog/models"
    "github.com/astaxie/beego"
)

func main() {
    beego.Run()
}

数据库的操作

ORM插入数据

1,  ORM 对象
2,  结构体对象
3,  结构体对象赋值
4,  插入
package controllers

import (
    "github.com/astaxie/beego"
    "github.com/astaxie/beego/orm"
    "blog/models"
)

type LoginController struct {
    beego.Controller
}



func (this *LoginController) Get() {
    // 获取orm对象
    o := orm.NewOrm()

    // 获取结构体对象
    user := models.User{}

    // 对结构体进行赋值
    user.Name = "chenrun"
    user.Age = "20"
    user.Gender = ""

    // 插入(返回两个,第一个是影响的行数,第二个有没有错误)
    _, err := o.Insert(&user)

    // 判断错误
    if err != nil {
        beego.Info("插入数据失败", err)
        return
    }


    this.Data["username"] = "chenrun"
    this.TplName = "login.html"
}

查询操作

1, orm对象
2, 查询对象
3, 指定查询对象字段值
4, 查询
package controllers

import (
    "github.com/astaxie/beego"
    "github.com/astaxie/beego/orm"
    "blog/models"
)

type MainController struct {
    beego.Controller
}

func (c *MainController) Get() {
    // 获取orm对象
    o := orm.NewOrm()

    // 获取查询对象
    user := models.User{}

    // 指定查询字段
    // 根据ID查询
    // user.Id = 1

    // 根据其他字段
    user.Name = "chenrun"

    // 查询
    err := o.Read(&user, "Name")
    if err != nil {
        beego.Info("查询失败", err)
        return
    }
    beego.Info("查询成功", user)
    

    c.TplName = "index.html"
}

更新

1, orm对象
2, 需要更新的结构体
3, 查找到需要更新的数据
4, 给数据重新赋值
5, 更新
func (this *UpdateController) Get() {
    // 获取orm对象
    o := orm.NewOrm()

    // 需要更新的结构
    user := models.User{}

    // 查找到需要更新的数据
    user.Id = 1
    err := o.Read(&user)

    if err == nil {
        user.Name = "penghuixian"
        user.Age = "18"
        user.Gender = ""
        // 更新
        _, err := o.Update(&user)
        if err != nil {
            beego.Info("更新失败", err)
            return
        }
    }

    this.TplName = "index.html"
}

删除操作

func (this *DeleteController) Get() {
    // 获取orm对象
    o := orm.NewOrm()

    // 获取表对象
    user := models.User{}

    // 指定要删除的字段名
    user.Id = 2

    // 进行删除操作
    _, err := o.Delete(&user)
    if err != nil {
        beego.Info("删除失败", err)
        return
    }

    this.TplName = "index.html"
}

 

ORM多对多插入

o := orm.NewOrm()
post := Post{Id: 1}
m2m := o.QueryM2M(&post, "Tags")// 第一个对象必须是主键
tag := &Tag{Id: 1}
o.Read(tag)
num, err := m2m.Add(tag) // 参数可以对对象,指针,对象数组,指针数组

 多对多查询

方法一:

post := Post{Id: 1}
err := o.Read(&post)
num, err := o.LoadRelated(&post, "Tags")

方法二:

var posts []*Post
num, err := dORM.QueryTable("post"),Filter("Tags__Tag__Name", "golang").All(&posts)

 

posted @ 2018-11-21 21:06  猴里吧唧  阅读(384)  评论(0)    收藏  举报