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)