第九单元 ORM 一、ORM介绍 1.ORM:Object Relational Mapping 对象关系映射 2.作用:是把对对象的增删改查操作转换为sql 3.支持的数据库驱动 mysql sqlite3 postgresql oracle 4.优点 4.1 支持golang语言的所有数据类型,比如:字符串,整型,布尔等 4.2 学习比较简单,采用的是CRUD风格 4.3 表关联:one2one,one2many,many2many 4.4 跨库查询 4.5 使用原生SQL查询 4.6 比较稳定,性能好 二、ORM的使用 2.1 安装ORM go get github.com/astaxie/beego/orm 2.2 ORM增删改查演示 orm.RegisterDataBase("default", "mysql", "root:root@tcp(127.0.0.1:3306)/1712a") orm.RunSyncdb("default", false, true) //修改model字段自动同步数据表 步骤1.main.go package main import ( _ "1803a_chapter9/routers" "github.com/astaxie/beego" "github.com/astaxie/beego/orm" _ "github.com/go-sql-driver/mysql" ) //初始化函数定义 func init() { //注册mysql驱动 orm.RegisterDataBase("default", "mysql", "root:root@tcp(127.0.0.1:3306)/1803a") //同步结构体到数据表 orm.RunSyncdb("default", false, true) } func main() { beego.Run() } 步骤2.路由定义 routes/router.go package routers import ( "1803a_chapter9/controllers" "github.com/astaxie/beego" ) func init() { beego.Router("/", &controllers.MainController{}) beego.Router("/add", &controllers.MemberController{}, "post:AddMember") beego.Router("/details/:id", &controllers.MemberController{}, "get:Details") beego.Router("/list", &controllers.MemberController{}, "get:MemberList") beego.Router("/update/:id", &controllers.MemberController{}, "put:UpdateMember") beego.Router("/delete/:id", &controllers.MemberController{}, "delete:DeleteMember") } 步骤3.模型定义 Models.go // Model package models import ( "github.com/astaxie/beego/orm" ) type Member struct { Id int `orm:"column(id);size(50) auto" description:"id"` Name string `orm:"column(name);size(50)" description:"名称"` Email string `orm:"column(email);size(50)" description:"邮箱"` Age int `orm:"column(age);size(4)" description:"年龄"` } func init() { orm.RegisterModel(new(Member))) //注册模型 } 步骤4.控制器定义 controllers/memberController.go package controllers import ( "1803a_chapter9/models" "strconv" "github.com/astaxie/beego" "github.com/astaxie/beego/orm" ) type MemberController struct { beego.Controller } //会员信息添加 func (c *MemberController) AddMember() { reJson := make(map[string]interface{}) c.Data["json"] = reJson defer c.ServeJSON() o := orm.NewOrm() var member models.Member member.Name = c.GetString("name") member.Email = c.GetString("email") member.Age, _ = c.GetInt("age", 18) if member.Name == "" { reJson["message"] = "用户名不能为空" reJson["status"] = "failed" return } _, err := o.Insert(&member) if err == nil { reJson["status"] = "ok" reJson["message"] = "添加成功" } else { reJson["status"] = "faild" reJson["message"] = "添加失败" } } //单个信息查询 func (c *MemberController) Details() { idStr := c.Ctx.Input.Param(":id") id, _ := strconv.Atoi(idStr) reJson := make(map[string]interface{}) c.Data["json"] = reJson defer c.ServeJSON() var memberDetails []*models.Member om := orm.NewOrm() om.QueryTable("member").Filter("id", id).One(&memberDetails) if len(memberDetails) == 0 { reJson["status"] = "failed" reJson["message"] = "无此数据" } else { reJson["status"] = "ok" reJson["message"] = "查询成功" } reJson["data"] = &memberDetails } //列表查询 func (c *MemberController) MemberList() { reJson := make(map[string]interface{}) c.Data["json"] = reJson defer c.ServeJSON() var memberList []*models.Member om := orm.NewOrm() om.QueryTable("member").All(&memberList) if len(memberList) == 0 { reJson["status"] = "failed" reJson["message"] = "无数据" } else { reJson["status"] = "ok" reJson["message"] = "查询成功" } reJson["data"] = &memberList } //单个更新 func (c *MemberController) UpdateMember() { idStr := c.Ctx.Input.Param(":id") id, _ := strconv.Atoi(idStr) o := orm.NewOrm() var member models.Member member.Id = id reJson := make(map[string]interface{}) c.Data["json"] = reJson defer c.ServeJSON() if o.Read(&member) == nil { member.Name = c.GetString("name") member.Email = c.GetString("email") member.Age, _ = c.GetInt("age") if _, err := o.Update(&member); err == nil { reJson["status"] = "ok" reJson["message"] = "更新成功" } } } //删除单条信息 func (c *MemberController) DeleteMember() { idStr := c.Ctx.Input.Param(":id") id, _ := strconv.Atoi(idStr) o := orm.NewOrm() var member models.Member member.Id = id reJson := make(map[string]interface{}) c.Data["json"] = reJson defer c.ServeJSON() if num, err := o.Delete(&member); err == nil { reJson["status"] = "ok" reJson["message"] = "删除成功" } else { reJson["status"] = "failed" reJson["message"] = "删除失败" } }