版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
背景 :
可以使用ORM框架操作数据库
beego框架自带了 ORM框架
本篇实践 beego 框架ORM 的CRUD操作
CREATE -READ -UPDATE -DELETE
代码:
创建一个控制器 moudle.go
package controllers
import (
"fmt"
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
_ "github.com/go-sql-driver/mysql"
)
type UserInfo struct {
Id int64
Username string
Password string
}
type ModuleController struct {
beego.Controller
}
//Get is a function
func (c *ModuleController) Get() {
//c.Ctx.WriteString("test moudle")
orm.RegisterDataBase("default", "mysql", "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8", 30)
orm.RegisterModel(new(UserInfo))
o := orm.NewOrm()
user := UserInfo{Username: "zhangsan", Password: "123456"}
//插入数据
//id, err := o.Insert(&user)
//更新数据
//user.Id = 2
//user.Username = "lisi"
//id, err := o.Update(&user)
//删除数据
//user.Id = 3
//id, err := o.Delete(&user)
//读取
user.Id = 1
o.Read(&user)
//c.Ctx.WriteString(fmt.Sprintf("id: %d err: %v", id, err))
c.Ctx.WriteString(fmt.Sprintf("user_info: %v", user))
}
本地启动一个docker化安装的mysql 环境 套接字127.0.0.1:3306 账户 root/123456
创建两个数据库 default 和 test数据库
create database dafault;
create database test;
创建user_info表结构
create table user_info(
id int(11) auto_increment ,
username varchar(32),
password varchar(128),
primary key(id)
) ;
beego的 ORM框架叫 “github.com/astaxie/beego/orm”
同时导入mysql的驱动 ,只需要加载 mysql的 init方法即可。
_ “github.com/go-sql-driver/mysql”
修改route路由 ,加载该控制器对应的 route路由
package routers
import (
"WEB/controllers"
"github.com/astaxie/beego"
)
func init() {
beego.Router("/", &controllers.MainController{})
beego.Router("/testcontrol", &controllers.TestController{}, "get:Get")
beego.Router("/testcontrol", &controllers.TestController{}, "post:Post")
beego.Router("/modulecontrol", &controllers.ModuleController{}, "get:Get")
beego.Router("/modulecontrol", &controllers.ModuleController{}, "post:Post")
}
环境准备就绪之后 ,重新启动bee
bee run
浏览器访问127.0.0.1/modulecontrol
可以看到操作的相关信息
查看后台数据库,可以看到CRUD之后相关数据的变化
moudle.go中包含了全部的CRUD操作
链接数据库
orm.RegisterDataBase("default", "mysql", "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8", 30)
orm.RegisterModel(new(UserInfo))
o := orm.NewOrm()
create操作
user := UserInfo{Username: "zhangsan", Password: "123456"}
//插入数据
id, err := o.Insert(&user)
c.Ctx.WriteString(fmt.Sprintf("id: %d err: %v", id, err))
read操作
user := UserInfo{Username: "zhangsan", Password: "123456"}
user.Id = 1
o.Read(&user)
c.Ctx.WriteString(fmt.Sprintf("user_info: %v", user))
update操作
user := UserInfo{Username: "zhangsan", Password: "123456"}
user.Id = 2
user.Username = "lisi"
id, err := o.Update(&user)
c.Ctx.WriteString(fmt.Sprintf("user_info: %v", user))
delete操作
user := UserInfo{Username: "zhangsan", Password: "123456"}
id, err := o.Delete(&user)
c.Ctx.WriteString(fmt.Sprintf("user_info: %v", user))
注意:
有一点需要注意的是 结构体 和 mysql数据表的对应关系 ,有一个默认的规则,示例如下:
UserInfo --> user_info
DBTest --> d_b_test
总结一句就是两个大写字母之间要有一个下划线