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

news2024/9/21 3:03:32

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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/675439.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机组成原理】微程序控制器

目录 一、微程序控制器概述 二、微程序控制器设计方法 三、微指令执行过程 四、控制字段的编码方式 五、下址字段的设计方法 六、微程序入口地址的产生方法 一、微程序控制器概述 微程序&#xff1a;微指令构成的有序集合&#xff0c;一条指令对应一段微程序 微指令&…

【小沐学Android】Material Design设计规范之颜色篇

文章目录 1、简介1.1 Android1.2 Material Design 2、Material Design 12.1 材料设计2.2 颜色 3、Material Design 23.1 材料系统3.2 颜色 4、Material Design 34.1 颜色样式4.2 配色方案4.3 Material Theme Builder 结语 1、简介 1.1 Android 谷歌在2007年发布了第一个测试版…

chatgpt赋能python:Python清除代码:让你的项目更加优美

Python清除代码&#xff1a;让你的项目更加优美 随着时间推移和项目规模扩大&#xff0c;代码中可能会出现许多冗余、无用或重复的代码。这不仅会让代码难以维护&#xff0c;还会降低代码的性能和可读性。而Python作为一种高级编程语言&#xff0c;提供了许多工具和技术来清除…

牛客练习赛108 E.琉焰(非树边性质/线段树分治+可撤销并查集 or LCT)

题目 思路来源 官方题解 题解 针对每个连通块&#xff0c;单独考虑&#xff1a; 一方面&#xff0c; 任取连通块的某棵生成树&#xff0c; 对于任意非树边(u,v)&#xff0c;把树边u到v上的所有边都选中&#xff0c;即被覆盖1次&#xff0c; 任取某个非树边集合S&#xff…

LangChain for LLM Application Development 基于LangChain开发大语言应用模型(下)

以下内容均整理来自deeplearning.ai的同名课程 Location 课程访问地址 DLAI - Learning Platform Beta (deeplearning.ai) LangChain for LLM Application Development 基于LangChain开发大语言应用模型&#xff08;上&#xff09; 一、LangChain: Q&A over Documents基于文…

bert4rec简介

1、bert4rec提出动机 用户行为动态变化&#xff0c;序列行为建模取得了不错的效果 单向结构限制了行为序列中隐藏信息的挖掘 序列神经网络顺序依赖&#xff0c;无法并行计算 为此&#xff0c;提出了 基于双向self-attention和Cloze task的用户行为序列建模方法。据我们所知…

解决Jenkins报错

解决Jenkins报错 1 linux空间不够问题1.1 报错现象1.2 定位问题1.3 解决措施 2 bash问题2.1 问题现象2.2 问题定位2.3 解决措施 3 虚拟环境问题3.1 问题现象3.2 问题定位3.3 解决措施 4 jenkins构建完成但一直转圈问题4.1 问题现象4.2 问题定位4.3 解决措施 5 jenkins自动化部署…

C高级6.24

一、整理grep、find、cut、tar、apt-get、dpkg、ln、ln-s指令 1.grep ----->查找字符串 grep 字符串 文件名 -w:按单词查找 -R:实现递归查找&#xff0c;主要用于路径是目录的情况 -i:不区分大小写 -n:显示行号 grep -w "^ubuntu" /etc/passwd ---->查找以ub…

【深度学习】RepVGG解析和学习体会

文章目录 前言0. Vgg1.RepVGG Block 详解 前言 论文名称&#xff1a;RepVGG: Making VGG-style ConvNets Great Again 论文下载地址&#xff1a;https://arxiv.org/abs/2101.03697 官方源码&#xff08;Pytorch实现&#xff09;&#xff1a;https://github.com/DingXiaoH/RepV…

今天是世界Wi-Fi日!

很多人都不知道&#xff0c;今天其实是世界Wi-Fi日&#xff1a; 这个特殊的纪念日&#xff0c;是由无线宽带联盟&#xff08;Wireless Broadband Alliance&#xff09;确定的&#xff0c;并得到了互联城市咨询委员会 &#xff08;CCAB&#xff09;等组织的大力支持。 无线宽带联…

数据处理神器tidyverse!教你如何秒速搞定数据处理!

一、前言 在R语言中&#xff0c;tidyverse是一个庞大的数据分析生态系统&#xff0c;它由一系列数据可视化和数据处理软件包组成&#xff0c;能够极大地提高数据分析的效率和准确性。 在使用 Tidyverse 的过程中&#xff0c;我们会经常用到以下几个工具&#xff1a; ggplot2&am…

chatgpt赋能python:Python浮点数:介绍、精度和应用

Python浮点数&#xff1a;介绍、精度和应用 Python是一种高级编程语言&#xff0c;许多程序员使用Python编写计算机程序。与其他编程语言不同&#xff0c;Python是一种动态类型的语言&#xff0c;并且它处理浮点数时更加灵活。在本文中&#xff0c;我们将介绍Python浮点数的概…

python自动化办公——读取PPT写入word表格

Python自动化办公——读取PPT内容写入word表格 文章目录 Python自动化办公——读取PPT内容写入word表格一、需求分析二、导入依赖三、代码四、结果及总结 一、需求分析 &#x1f4d6;由于我们知识图谱课程需要将课堂小组汇报的PPT总结成word文档&#xff0c;而我觉得一页一页复…

win10安装nginx的配置和使用方法(图文)

window10系统安装nginx服务&#xff0c;提供网页方面的服务。下面为详细图文安装配置教程。 1&#xff09;下载nginx软件 官方下载地址&#xff1a;http://nginx.org/en/download.html 2&#xff09;解压缩软件 unzip nginx-1.20.1.zip 或者 使用解压缩软件&#xff0c;下…

视频与AI,与进程交互(二) pytorch 极简训练自己的数据集并识别

目标学习任务 检测出已经分割出的图像的分类 2 使用pytorch pytorch 非常简单就可以做到训练和加载 2.1 准备数据 如上图所示&#xff0c;用来训练的文件放在了train中&#xff0c;验证的文件放在val中&#xff0c;train.txt 和 val.txt 分别放文件名称和分类类别&#xff…

Android之 弹框总结

一 简介 1.1 弹框即浮与页面之上的窗口&#xff0c;如键盘弹框&#xff0c;吐司弹框&#xff0c;确认弹框&#xff0c;下拉选择框&#xff0c;应用悬浮框等 1.2 弹框控件也很多&#xff0c;比如常用的Spinner&#xff0c;Dialog&#xff0c;Toast&#xff0c;PopWindow等&…

小主机折腾记14

1.m72e主机&#xff0c;3240t-2390t-3470t测试&#xff1b; 2390t官方参数 在m72e上 全核3.08Ghz 单核3.28-3.31Ghz 核显2帧 评分 3470t官方参数 在m72e上 全核睿频3.28 单核最高3.44 核显1.2帧&#xff1f;&#xff1f;&#xff1f;还不如那啥HD2000 最后评分 进入…

chatgpt赋能python:Python求累加的方法及其应用

Python求累加的方法及其应用 在Python编程中&#xff0c;经常需要对一系列数字进行求和或累加的操作。那么在Python中&#xff0c;我们可以通过哪些方法来实现这个功能呢&#xff1f;本文将为大家介绍Python求累加的方法及其应用。 1. Python中的for循环 首先&#xff0c;我…

05-事件循环

事件循环 以下知识点都涉及到事件循环 计时器&#xff0c;promise&#xff0c;ajax&#xff0c;node 明白此知识点&#xff0c;是前端的分水岭&#xff0c;可以提高效率&#xff0c;js中奇怪的东西都可以得到解决&#xff0c;整个过程是根据W3C和谷歌源码进行 浏览器的进程…

一文理解cast转换

目录 写在前边 1. what&#xff1f;又报错&#xff1a; 2. 靠&#xff0c;难道是这样&#xff1f; 3. 小试牛刀 4. 实际中的“坑” 写在后边 写在前边 关于$cast转换的结论无外乎以下四条&#xff1a; 如果将子类句柄复制给父类句柄&#xff0c;可以实现父类句柄的向下转换…