背景 :
可以使用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
總結一句就是兩個大寫字母之間要有一個下劃線