Beego框架快速入门

350 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情

前言

本篇通过一个简单的查询示例,演示整个Beego框架的使用。

  • 代码编辑工具:Goland

需求

连接MySQL数据库,通过GET请求,传入id值查询出对应学生信息

一、控制器逻辑

  • 在controllers目录下创建GoDemoController.go文件
package controllers

import (
	"github.com/astaxie/beego"
	"go_project/models"
)

//定义一个控制器结构体
//一般一个模块定义一个控制器
type GoDemoController struct {
	//嵌套beego基础控制器,在go语言中嵌套struct,就类似继承的概念
	//这里就相当于,继承了beego.Controller的方法和属性
	beego.Controller
}

//覆盖beego.Controller的Get方法,用于处理RESTful请求中的get请求
// beego.Controller默认支持多种RESTful方法,例如:Post、Put、Delete等等
func (c *GoDemoController) Get() {

	//Data是继承过来的属性,是map类型,可以保存任意类型数据,主要用于保存请求响应数据
	//可以通过Data将参数,传入视图模板文件
	c.Data["title"] = "学生信息统计"

	// 设置需要渲染的模板文件,框架会去views目录查找这个模板文件
	c.TplName = "student.tpl"
}

二、设置Url路由

  • 在routers包下的init()函数中设置访问路由
package routers

import (
	"go_project/controllers"
	"github.com/astaxie/beego"
)

// go 包初始化函数,go语言中在导入一个包的时候,如果被导入包存在init函数,会执行init函数
// 因此这里可以使用init函数初始化路由设置
func init() {
    beego.Router("/", &controllers.MainController{})
	// 使用beego.Router函数,注册路由规则。
	// 第一个参数是url路由,第二个参数是控制器
	// 这里的意思就是将访问 /student 这个url的请求,交给controllers.GoDemoController控制器处理。
	beego.Router("/student",&controllers.GoDemoController{})
}

通过在浏览器访问http://127.0.0.1:8080/student地址,进入到GoDemoController控制器的Get()方法

路由规则说明

beego RESTful路由规则,默认是通过 请求方法 确认由哪个控制器方法执行,例如get请求,由Get方法执行,POST请求由Post方法执行。

三、编写model逻辑

3.1 定义表结构

  • 创建表
CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID自增',
  `name` varchar(255) DEFAULT NULL COMMENT '姓名',
  `age` int(11) DEFAULT NULL COMMENT '年龄',
  `stu_class` int(11) DEFAULT NULL COMMENT '年级',
  `address` varchar(255) DEFAULT NULL COMMENT '家庭住址',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

在MySQL数据库中执行创建语句创建该表。

  • 表中添加数据
INSERT INTO `student` VALUES (1, '张三', 12, 6, '北京朝阳');
INSERT INTO `student` VALUES (2, '李四', 11, 5, '北京海淀');

3.2 初始化数据库连接

一般初始化数据库连接都是在main.go入口的地方设置一次。

package main

import (
	"github.com/astaxie/beego/orm"
	_ "go_project/routers"
	"github.com/astaxie/beego"

	//导入mysql驱动,这是必须的
	_ "github.com/go-sql-driver/mysql"
)

//初始化应用设置,通过init函数初始化数据库连接,go语言中这个函数会优先执行
func init() {
	// 这里注册一个default默认数据库,数据库驱动是mysql.
	// 第三个参数是数据库dsn, 配置数据库的账号密码,数据库名等参数
	//  dsn参数说明:
	//      username    - mysql账号
	//      password    - mysql密码
	//      db_name     - 数据库名
	//      127.0.0.1:3306 - 数据库的地址和端口
	orm.RegisterDataBase("default", "mysql", "username:password@tcp(127.0.0.1:3306)/db_name?charset=utf8")
}

func main() {
	beego.Run()
}

为了初始化mysql连接,在入口main.go文件,增加init函数初始化数据库设置。

3.3 创建model

在models目录下创建文件student.go

package models

import "github.com/astaxie/beego/orm"

//定义Student模型,绑定student表结构,用来保存sql查询结果
//说明:结构体中属性首字母必须大写,方便进行传递
type Student struct {
	Id int
	Name string
	Age int32
	StuClass int32	//数据库表中字段下划线会被映射成大写字母
	Address string
}

//定义Student模型绑定哪个表
func (s *Student) TableName() string {
	//返回mysql表名
	return "student"
}

//初始化函数,可以用来向orm注册model
func init(){
	//向orm注册Student模型
	orm.RegisterModel(&Student{})
}

//根据id查询学生信息
func GetStudentById(id int) * Student {
	if id == 0 {
		return nil
	}

	//创建orm对象,后面都是通过orm对象操作数据库
	o := orm.NewOrm()
	//初始化一个Student模型对象
	student := Student{}
	//设置查询参数
	student.Id = id

	//调用Read方法,根据student设置的参数,查询一条记录,结果保存到student结构体变量中
	//默认是根据主键进行查询
	//等价sql:SELECT `id`, `name`, `age`, `stu_class`,  `address` FROM `student` WHERE `id` = 1
	err := o.Read(&student)

	//检测查询结果
	if err == orm.ErrNoRows {
		//找不到记录
		return nil
	} else if err == orm.ErrMissPK {
		//找不到主键
		return nil
	}
	return &student
}

3.4 通过控制器调用model

下面修改控制器代码,GoDemoController.go文件中的Get()方法。

func (c *GoDemoController) Get() {
	// 获取请求参数, 返回int类型
	id, _ := c.GetInt("id")

	//Data是继承过来的属性,是map类型,可以保存任意类型数据,主要用于保存请求响应数据
	//可以通过Data将参数,传入视图模板文件
	c.Data["title"] = "学生信息统计"

	//调用model,根据id查询对应的学生信息
	student := models.GetStudentById(id)

	// 然后将student数据保存到Data中, 将参数传给后面的views视图模板处理
	c.Data["student"] = student

	// 设置需要渲染的模板文件,框架会去views目录查找这个模板文件
	c.TplName = "student.tpl"
}

四、编写view视图逻辑

在views目录下创建student.tpl文件

<!DOCTYPE html>
<html lang="zh-CN">
<head>
	<title>Demo</title>
	<meta charset="utf-8">
</head>
<body>
<h2>{{.title}}</h2>
    {{ if .student }}
    用户名: {{.student.Name}}  <br/>
    年  龄: {{.student.Age}}   <br/>
    年  级: {{.student.StuClass}} 年级 <br/>
    地  址: {{.student.Address}}  <br/>
    {{else}}
    查寻不到该学生
    {{ end }}
</body>
</html>

如果查询的学生存在,则显示对应的学生信息,否则显示查寻不到该学生。

五、运行项目

5.1 准备工作

运行项目之前在项目终端执行如下命令

D:\Codes\goland\go_project>go mod tidy

5.2 启动项目

在main.go文件下启动main方法

5.3 访问地址链接

通过浏览器访问如下地址:

http://127.0.0.1:8080/student?id=1

03.Beego框架快速入门01.jpg