0 beego的启动流程
1 入口
package main
import (
//全局使用的路由和models
_ "studyDemo/models"
_ "studyDemo/routers"
beego "github.com/beego/beego/v2/server/web"
)
func main() {
beego.Run()
}
2 根据请求路由加载对应的控制器
package routers
import (
beego "github.com/beego/beego/v2/server/web"
//导入控制器
"studyDemo/controllers"
)
/*路由与控制器请求方法*/
func init() {
beego.Router("/", &controllers.MainController{})
//路径-对应的控制器-控制器加载时的请求方式:请求调用的方法(可以有多个)
beego.Router("/DB", &controllers.DBController{}, "get:GetFunc;post:PostFunc")
}
3 控制器加载对应的view,以及数据处理操作
package controllers
import (
"github.com/beego/beego/v2/adapter/orm"
beego "github.com/beego/beego/v2/server/web"
"studyDemo/models"
)
/*定义控制器*/
type MainController struct {
beego.Controller
}
type DBController struct {
beego.Controller
}
/*控制器路由方法*/
func (c *MainController) Get() {
//传递数据给view
c.Data["Website"] = "beego.vip"
c.Data["Email"] = "astaxie@gmail.com"
//注册控制器对应的view
c.TplName = "test.tpl"
}
func (c *DBController) GetFunc() {
c.TplName = "test.tpl"
}
func (c *DBController) PostFunc() {
c.TplName = "index.tpl"
}
4 view的显示以及使用控制器传递的数据
//传递的数据在{{}}中使用.key
<h2>hello{{.Email}}<h2 \>
1 ORM框架 链接数据库
Beego中内嵌了ORM框架,用来操作数据库。那么ORM框架是什么呢?ORM框架是Object-RelationShipMapping的缩写,中文叫关系对象映射.可以不再使用sql语句可以操作数据库.
1 数据库表的创建
数据库不能通过orm创建
表的创建在model
表的操作在控制器
package models
//导包
import (
"github.com/beego/beego/v2/adapter/orm"
_ "github.com/go-sql-driver/mysql"
)
// 要生成表的类,不要使用下划线定义属性_
type User struct {
Id int
Name string
PassWord string
}
func init() {
//获取数据库对象,
orm.RegisterDataBase("default", "mysql", "root@tcp(127.0.0.1:3306)/test?charset=utf8")
//创建表
orm.RegisterModel(new(User))
//生成表,一般放在model
orm.RunSyncdb("default", false, true)
//操作表,一般放在控制器
}
2 数据库表的操作(增删查改)
在控制器中操作
//插入一条记录,需要先new一个对象并赋值,然后通过orm框架直接插入数据库
user := new(models.User)
user.Name = "tom"
user.PassWord = "123456"
orm := orm.NewOrm()
orm.Insert(user)
2 通过beego链接数据库(原生sql)
在main.go,导入models
import (
_ "studyDemo/models"
在models文件夹下新建一个model.go
执行数据库操作,这一步分为两种情况,一种是增删改(Exec),一种是查询(Query),因为增删改不返回数据,只返回
执行结果,查询要返回数据,所以这两块的操作函数不一样。
package models
//导入驱动,但是通过sql使用
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
"fmt"
)
//加载models的时候,所有的model都会加载这个方法(适用热更新)
func init() {
//链接数据库
conn, err := sql.Open("mysql", "root@tcp(127.0.0.1:3306)/test?charset=utf8")
if err != nil {
fmt.Println("fail-------", err)
return
}
//关闭数据库
defer conn.Close()
fmt.Println("创建表")
//执行创建创建表的sql语句,(sql语句可以先通过mysql创建获取)
result, err := conn.Exec("CREATE TABLE `stu2` (\n `stuNo` char(6) NOT NULL,\n `stuName` varchar(10) NOT NULL,\n `stuSex` char(2) NOT NULL,\n `stuAge` tinyint NOT NULL,\n `stuSeat` tinyint NOT NULL,\n `stuAddress` varchar(10) NOT NULL,\n `ch` tinyint DEFAULT NULL,\n `math` tinyint DEFAULT NULL,\n PRIMARY KEY (`stuNo`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;")
if err != nil {
fmt.Println("fail-------", err)
return
}
fmt.Println("success-------", result)
}
//插入数据
result, err := conn.Exec("insert into stu2(stuNo,stuName,stuSex) values (?,?,?)", "1", "tom", "男")
//查询单个数据
result, err := conn.Query("select stuName from stu2")
if err != nil {
fmt.Println("fail-------", err)
return
}
var stuName string
for result.Next() {
result.Scan(&stuName)
}
fmt.Println("stuName-------", stuName)