学习⽬标
⼀、ORM介绍⼆、ORM优点三、ORM的使⽤四、ORM增删改查操作
⼀、ORM介绍(了解)1.ORM(Object Relational Mapping) 对象关系映射对象关联到数据表
对对象做操作的时候实际上是对数据表的操作
2.⽀持的数据库驱动mysql/sqlite3/postgresql⼆、ORM的优点1.⽀持golang语⾔的所有数据类型存储 如:字符串,整型,浮点型,布尔型等2.上⼿⽐较容易,采⽤的是CRUD⻛格 Create query Update Delete3.⾃动关联表 join One2One(⼀对⼀), One2Many(⼀对多),Many2Many(多对多)4.跨数据库兼容查询 数据库如:1712A 1712B5.直接使⽤原⽣SQL查询或映射6.ORM⽐较稳定和健壮
三、ORM的使⽤(掌握)1.安装ORM
1 go get github.com/astaxie/beego/orm
四、ORM增删改查操作演示
1.修改配置conf/app.confmysqluser = “root” //数据库账号mysqlpass = “root” //数据库密码mysqlurls = “127.0.0.1” //数据库主机地址IPmysqldb = “1712a” //使⽤的数据库mysqlport = “3306” //端⼝号
2. orm数据库配置 main.go
1 func init() {
2 //【数据库配置】开始
3
4 mysqlurls := beego.AppConfig.String(“mysqlurls”)
5 mysqlport := beego.AppConfig.String(“mysqlport”)
6 mysqluser := beego.AppConfig.String(“mysqluser”)
7 mysqlpass := beego.AppConfig.String(“mysqlpass”)
8 mysqldb := beego.AppConfig.String(“mysqldb”)
9 conn := mysqluser + “:” + mysqlpass + “@tcp(” + mysqlurls + “:” + mysqlport + “)/” + mysqldb + “?charset=utf8”
10 orm.RegisterDataBase(“default”, “mysql”, conn)
11 //orm.RegisterDataBase(“default”, “mysql”, “root:root@tcp(127.0.0.1:3306)/1712a”)
12 //【数据库配置】结束
13 orm.RunSyncdb(“default”, false, true) //修改model字段⾃动同步数据表
14
15 //【⽇志配置】开始
16 // log := logs.NewLogger(10000)
17 // log.SetLogger(“console”, `{“level”:1}`)
18 // log.EnableFuncCallDepth(true)
19 // log.SetLogger(“file”, `{“filename”:”logs/test.log”,”daily”:true}`)
20 //【⽇志配置】结束
21 }
3. 数据表创建
1 CREATE TABLE `person` (
2 `id` int(11) NOT NULL AUTO_INCREMENT,
3 `username` varchar(50) DEFAULT NULL,
4 `sex` varchar(260) DEFAULT NULL,
5 `email` varchar(260) DEFAULT NULL,
6 PRIMARY KEY (`id`)
7 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4.model定义models/person.go
1 package models
2
3 import (
4 “github.com/astaxie/beego/orm”
5 )
6
7 //由于model这个名字叫 Person 那么操作的表其实 person
8 type Person struct {
9 Id int
10 Username string
11 Sex string
12 Email string
13 }
14
15 func init() {
16 // 需要在init中注册定义的model
17 orm.RegisterModel(new(Person))
18 }
19
20 func AddUser(m *Person) (id int64, err error) {
21 o := orm.NewOrm()
22 id, err = o.Insert(m)
23 return
24 }
5.Controller控制器定义 controllers/PersonController.go
1 package controllers
2
3 import (
4 “beestudy1/models”
5 “fmt”
6 “strconv”
7
8 “github.com/astaxie/beego”
9 “github.com/astaxie/beego/orm”
10 _ “github.com/go-sql-driver/mysql”
11 )
12
13 type PersonController struct {
14 beego.Controller
15 }
16
17 //⽤户添加
18 func (c *PersonController) AddUser() {
19 o := orm.NewOrm()
20 var person models.Person
21 person.Username = c.GetString(“username”)
22 person.Email = c.GetString(“email”)
23 person.Sex = c.GetString(“sex”)
24 fmt.Println(person)
25
26 id, err := o.Insert(&person)
27 if err == nil {
28 c.Data[“json”] = id
29 } else {
30 c.Data[“json”] = err.Error()
31 }
32 c.ServeJSON()
33
34 }
35
36 //单个⽤户查询
37 func (c *PersonController) GetOneUser() {
38
39 idStr := c.Ctx.Input.Param(“:id”)
40 //c.Ctx.WriteString(idStr)
41 id, _ := strconv.Atoi(idStr)
42
43 o := orm.NewOrm()
44 var person models.Person
45 person.Id = id
46
47 if err := o.Read(&person); err == nil {
48 c.Data[“json”] = person
49 } else {
50 c.Data[“json”] = err.Error()
51 }
52 c.ServeJSON()
53
54 }
55
56 //⽤户列表查询
57 func (c *PersonController) UserList() {
58
59 o := orm.NewOrm()
60 var lists []orm.ParamsList
61 num, err := o.Raw(“SELECT * FROM `person`”).ValuesList(&lists)
62 if err == nil && num > 0 {
63 c.Data[“json”] = lists
64 } else {
65 c.Data[“json”] = err.Error()
66 }
67 c.ServeJSON()
68
69 }
70
71 //单个⽤户更新
72 func (c *PersonController) UpdateUser() {
73 idStr := c.Ctx.Input.Param(“:id”)
74 id, _ := strconv.Atoi(idStr)
75 o := orm.NewOrm()
76 var person models.Person
77 person.Id = id
78
79 if o.Read(&person) == nil {
80 person.Username = c.GetString(“username”)
81 if num, err := o.Update(&person); err == nil {
82 c.Data[“json”] = num
83 }
84 }
85
86 c.ServeJSON()
87
88 }
89
90 //删除单个⽤户
91 func (c *PersonController) DeleteUser() {
92
93 idStr := c.Ctx.Input.Param(“:id”)
94 id, _ := strconv.Atoi(idStr)
95
96 o := orm.NewOrm()
97 var person models.Person
98 person.Id = id
99
100 if num, err := o.Delete(&person); err == nil {
101 c.Data[“json”] = num
102 } else {
103 c.Data[“json”] = err.Error()
104 }
105 c.ServeJSON()
106
107 }
6.路由定义 routes/router.go
1 package routers
2
3 import (
4 “beestudy1/controllers”
5
6 “github.com/astaxie/beego”
7 )
8
9 func init() {
10 beego.Router(“/”, &controllers.MainController{})
11 beego.Router(“/hello”, &controllers.MainController{}, “get,post:Hello”)
12
13 beego.Router(“/httplib”, &controllers.MainController{}, “get,post:HttplibStudy”)
14 beego.Router(“/context”, &controllers.MainController{}, “get,post:ContextStudy”)
15
16 beego.Router(“/logtest”, &controllers.MainController{}, “get:Logtest”)
17
18 /**
19 * ⽤户管理
20 */
21 //⽤户添加
22 beego.Router(“/adduser”, &controllers.PersonController{}, “post:AddUser”)
23 //取⼀条数据
24 beego.Router(“/getoneuser/:id”, &controllers.PersonController{}, “get:GetOneUser”)
25 //⽤户列表
26 beego.Router(“/userlist”, &controllers.PersonController{}, “get:UserList”)
27 //删除⼀条⽤户
28 beego.Router(“/deleteuser/:id”, &controllers.PersonController{}, “get:DeleteUser”)
29
30 //更新⼀条⽤户
31 beego.Router(“/updateuser/:id”, &controllers.PersonController{}, “post:UpdateUser”)
32
33 }