【1 beego学习 -MAC框架与ORM数据库】

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"] = "[email protected]"
//注册控制器对应的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 beego学习 -MAC框架与ORM数据库】_第1张图片

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)

你可能感兴趣的:(beego,学习,数据库)