Gin(五):连接MySQL

C++实现Gin框架、MySQL、Redis完整指南 《Go语言与Gin框架开发实战指南》 本文摘要全面介绍了使用Go语言Gin框架构建Web应用的多种技术方案,涵盖从基础路由到高级功能的完整开发生态。主要内容包括: 核心开发栈 基于Gin+GORM+MySQL的RESTful API实现方案 Gin与Redis深度集成的12种应用场景 文件上传/静态资源服务的3种处理方式 关键技术点 JWT认证中间件开发流程 WebSocket实时通信实现 GORM事务管理与性能优化 自动API文档生成方案 进阶实践 微服务架构下的Gin应用部署 Docker容器化最佳实践 阅读详情

之前我们完成了注册,接下来要完成登录功能,但是有个问题,我们的数据没有持久化,无法得知有哪些用户注册了,这样就无法在登录时进行校验。

所以接下来我们要将数据持久化,也就是存储到数据库中,这里使用 MySQL

?建立数据库

首先我们要新建一个库,用来存放项目数据,建立一个名为 ginhello 的库。

create database ginhello;

当我们建立好数据库时,就可以通过 Goland进行数据库连接和使用。

选择 Goland 右侧的 Database,点击 + 号,选择 MySQL。填写相关信息,账户名,密码,要连接的数据库库名等信息,进行连接。

之后我们就可以通过 Goland 的图形化界面去新建立表。

右键选择刚刚连接的 ginhello ,new , table 然后填写字段名称和属性。下面给出建表语句。

create table user
(
	id int auto_increment primary key,
	email varchar(30) not null,
	password varchar(40) not null
)
comment '用户表';

?连接数据库

数据库的表已经建立成功,那么省下来就该与我们的 Gin 建立联系,通过代码连接到数据库。

新建文件夹 initDB 新建 initDB.go。

package initDB

import (
	"database/sql"
	_ "github.com/go-sql-driver/mysql"
	"log"
)

var Db *sql.DB

func init() {
	var err error
	Db, err = sql.Open("mysql", "root:1234@tcp(127.0.0.1:3306)/ginhello")
	if err != nil {
		log.Panicln("err:", err.Error())
	}
	Db.SetMaxOpenConns(10)
	Db.SetMaxIdleConns(10)
}

首先新建一个全局变量sql.DB方便我们后期调用,然后通过 sql.Open对数据进行连接。SetMaxOpenConns 是对 最大链接数的设置 SetMaxIdleConns 是设置最大空闲链接数

经过简单的设置,我们的程序就可以连接到数据库。

?增加用户

当数据库连接上时,就可以完善我们的注册功能。

修改 userModel.go 对 user 添加新的方法。

func (user *UserModel) Save() int64 {
	result, e := initDB.Db.Exec("insert into ginhello.user (email, password) values (?,?);", user.Email, user.Password)
	if e != nil {
		log.Panicln("user insert error", e.Error())
	}
	id, err := result.LastInsertId();
	if err != nil {
		log.Panicln("user insert id error", err.Error())
	}
	return id
}

该方法是对 user 类型进行添加的方法,最后返回一个新增行id

小提示 在编写 SQL 语句时,通过ctrl+enter 快捷键组合,选择 Edit Mysql Fragment ,会在编辑器下方重写打开一个编辑界面用来写SQL,并且带有自动提示,提示内容和我们链接的数据库相关。

最后修改 UserRegister 方法,当数据校验合格的时候进行存储。

func UserRegister(context *gin.Context) {
	var user model.UserModel
	if err := context.ShouldBind(&user); err != nil {
		context.String(http.StatusBadRequest, "输入的数据不合法")
		log.Panicln("err ->", err.Error())
	}
	id := user.Save()
	log.Println("id is ", id)
	context.Redirect(http.StatusMovedPermanently, "/")
}

当都写完的时候就可以运行我们的测试 TestUserPostForm 和 TestUserPostFormEmailErrorAndPasswordError 两个测试用例。

测试可以正常通过,此时检测我们的数据库。打开 User 表,里面只会有一条信息。

此时我们的注册也就完成了。

?登录

接下来快速完成登录功能。

具体的前端代码请看 Github下面贴出来具体的后端代码

我们要根据 Email 和 Password 校验用户数据是否正确。

userModel.go 根据 Email 查询代码,该文件其他代码也有略微变化,请注意查看。

func (user *UserModel) QueryByEmail() UserModel {
	u := UserModel{}
	row := initDB.Db.QueryRow("select * from user where email = ?;", user.Email)
	e := row.Scan(&u.Id, &u.Email, &u.Password)
	if e != nil {
		log.Panicln(e)
	}
	return u
}

通过对比页面上传入的密码和数据库中的密码是否一致来确定用户是否可以登录。

userHandler.go

func UserLogin(context *gin.Context) {
	var user model.UserModel
	if e := context.Bind(&user); e != nil {
		log.Panicln("login 绑定错误", e.Error())
	}

	u := user.QueryByEmail()
	if u.Password == user.Password {
		log.Println("登录成功", u.Email)
		context.HTML(http.StatusOK, "index.tmpl", gin.H{
			"email": u.Email,
		})
	}
}

每当一个功能编写完成的时候,切记要写上单元测试,这将会帮助我们在日后的项目中更加完善。

用户登录测试。

func TestUserLogin(t *testing.T) {
	email := "youngxhui@163.com"
	value := url.Values{}
	value.Add("email", email)
	value.Add("password", "1234")
	w := httptest.NewRecorder()
	req, _ := http.NewRequest(http.MethodPost, "/user/login", bytes.NewBufferString(value.Encode()))
	req.Header.Add("Content-Type", "application/x-www-form-urlencoded; param=value")
	router.ServeHTTP(w, req)
	assert.Equal(t, http.StatusOK, w.Code)
	assert.Equal(t, strings.Contains(w.Body.String(), email), true)
}

注意 该部分代码交之前有较大的改动,删除了之前部分演示代码。

✍总结

本节通过链接数据库,完成了数据库的增加和查询功能,并且完成了注册和登录的相关功能。

?‍?本章节代码

Github

个人公众微信号

文章与个人公众号同步更新,欢迎各位扫码关注。

在这里插入图片描述

13-Gin 中使用 GORM 操作 mysql 数据库 --[Gin 框架入门精讲与实战案例] GORM(Golang ORM)是Go语言(Golang)中一个非常流行的对象关系映射(ORM)库,它旨在简化数据库操作。通过GORM,开发者可以使用结构体和接口来代替SQL语句进行数据库的增删改查等操作,从而提高开发效率并减少错误。 阅读详情

相关推荐

gin框架中mysql的简单使用

1. 安装gorm 命令行中输入命令: go get github.com/jinzhu/gorm 稍等片刻后,即可安装成功。 2. 安装mysql驱动 命令行中输入命令: go get github.com/go-sql-driver/mysql 3. 创建相关文件 基于MVC模式,我们创建了如下目录和文件,文件内容先为空,后面再添加,如图: 4. 配置mysql数据库 编写数据库配置文件,在mysql.go文件中,加入如下代码: package...

时光清浅处,一步一安然 2548

Go语言web极速入门-(Gin+Mysql实现后端接口)

gin 是一个轻量级的 Go 语言 Web 框架,旨在提供一种简单、快速的方式来构建 Web 应用程序。它提供了一组简单的 API,可以让你轻松地处理 HTTP 请求、路由、模板渲染、中间件等功能。** Gin 的特点有: - 简单易用:Gin 提供了一组简单的 API,使用起来非常方便。 - 高性能:Gin 在性能方面表现优秀,常常可以达到接近原生性能的水平。 - 支持中间件:Gin 支持使用中间件来扩展框架的功能,可以方便地实现认证、日志、跨域等功能。 - 支持多种模板引擎

龙飞的博客 2343

DSP28335与Vofa+上位机通信实战:SCIb配置避坑指南(附完整代码)

本文提供DSP28335与Vofa+上位机通信的实战指南,重点解析SCIb模块配置的常见问题与解决方案。针对研旭开发板的硬件连接、波特率精确计算、FIFO高效使用以及FireWater协议封装进行了详细说明,并附有完整代码,帮助开发者快速实现实时数据可视化与波形分析,提升调试效率。

weixin_29172963的博客 150

go语言使用Gin框架链接数据库

本文讲解如何使用go语言链接数据库以下是一些用Gin框架链接数据库的步骤:假设您选择的数据库是MySQL,首先需要在系统中安装相应的MySQL数据库,并创建一个名为“testdb”的数据库。输入下载之后可以看见的是,在go.sum里面就有了相关的包。

jakelihua 3959

ArcGIS | 全球新冠肺炎地图数据下载和处理

ArcGIS

thinkpang的博客 2901

电脑的kernelbase.dll故障怎么处理?kernelbase.dll是什么文件

kernelbase.dll​是一个系统文件,属于Microsoft Windows操作系统的一部分。该DLL(动态链接库)文件包含了许多基本且低级的系统函数,这些函数被Windows上运行的各种程序和进程调用。kernelbase.dll通常与Kernel32.dll紧密相关,它是实现许多Windows API(应用程序编程接口)的封装。这些API涉及到内存管理、输入输出操作、进程和线程管理以及其他许多核心的操作系统功能。

电脑修复君的博客 4533

【Gin】Gin 使用 GORM 操作 MySQL 数据库

GORM 是Golang 的一个 orm 框架。ORM 就是通过实例对象的语法,完成关系数据库的操作的技术,是“对象-关系映射”(Object-Relational Mapping)的缩写。使用 orm 框架可以让我们更方便的操作数据库。

徒挽的博客 5268

sql server安装并SSMS连接

  SQL Server是一种广泛应用于网络业务数据处理的关系型数据库管理系统。SQL Server 2016是微软公司研发的新一代旗舰级数据库和分析平台,突出高级分析和丰富可视化,并融合了关键创新功能。其可提供对企业基础架构最高级别的支持,专门针对关键业务应用的多种功能与解决方案提供最高级别的可用性,并提供更多、更全面的功能以满足不同人群对数据的需求,包括支持来自不同网络环境的数据交互、全面的自助分析等创新功能。百度搜索sql server,在官网下载 地址是:SQL Server 下载| Microso

jiankang66的博客 5186

golang web 开发 —— gin 框架 (gorm 链接 mysql)

go gin gorm mysql

原来45的博客 4647

DirectX function “GetDeviceRemovedReason“ failed with DXGI_ERROR_DEVICE_HUNG (“The GPU will not resp

游戏报错"DXGI_ERROR_DEVICE_HUNG"的解决方案 在使用RTX 40系显卡运行FIFA 23等游戏时,可能出现DirectX报错导致游戏崩溃。这主要由于最新显卡驱动与DirectX 12的兼容性问题。解决方法包括: 降级显卡驱动版本 修改游戏配置文件,将DIRECTX_SELECT设为1 在显卡控制面板中关闭垂直同步、抗锯齿、DLSS 3等功能 调整电源模式为性能优先 这些操作可以有效解决因驱动兼容性导致的游戏崩溃问题。

猿小白的博客 3891

15.1-缓存调试解析

摘要:DSU-120提供L3缓存和监听过滤器(SF)RAM的调试功能,通过CLUSTERCDBG寄存器控制访问。该功能需在集群ON电源模式下使用,且需确保单核访问。寄存器位字段根据读写操作不同,可配置WAY、RAM类型等参数。数据读取分为监听过滤器RAM、标签RAM、数据RAM及MTE标签四种类型,各有特定的位字段解释。配置参数包括切片ID宽度、标签索引宽度等,随缓存大小变化。

baron-周贺贺-代码改变世界ctw 110

Gin 协程mysql客户端

这里选择yaml文件配置。

qq_36729594的博客 432

基于STM32设计的遥控灭火消防小车_296

随着城市化进程的加速和火灾发生频率的增加,传统的消防方式在应对初期火灾时存在反应慢、效率低等问题。为了提高火灾响应速度和灭火效率,本设计开发了一款基于STM32单片机的遥控灭火消防小车。该小车配备了烟雾检测、温湿度监测、火源定位、灭火操作等功能,能够通过蓝牙和WIFI实现远程控制与实时视频传输。设计采用了MQ2烟雾传感器、SHT30温湿度传感器、火光传感器和ESP32摄像头模块等硬件设备。系统不仅能够自动检测和定位火源,还可以手动调整灭火器对准位置,进行干粉灭火。此外,蜂鸣器用于火源报警,确保操作人员及时得

723

gin框架长连接_Gin(五):连接MySQL , Go 轻量级框架 Gin

在Gin(四):接收表单数据和模型绑定,Go语言最火web框架之一我们完成了注册,接下来要完成登录功能,但是有个问题,我们的数据没有持久化,无法得知有哪些用户注册了,这样就无法在登录时进行校验。所以接下来我们要将数据持久化,也就是存储到数据库中,这里使用 MySQL建立数据库首先我们要新建一个库,用来存放项目数据,建立一个名为 ginhello 的库。 create database ginhel...

weixin_30420175的博客 1144

华为od 面试八股文_C语言_02_含答案

华为od 面试八股文_C语言_02_含答案

MISAYAONE的博客 2230

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

gin mysql网上商城_Gin(五):连接MySQL

之前我们完成了注册,接下来要完成登录功能,但是有个问题,我们的数据没有持久化,无法得知有哪些用户注册了,这样就无法在登录时进行校验。所以接下来我们要将数据持久化,也就是存储到数据库中,这里使用 MySQL建立数据库首先我们要新建一个库,用来存放项目数据,建立一个名为 ginhello 的库。create databases ginhello;复制代码当我们建立好数据库时,就可以通过 Goland进...

weixin_39925098的博客 210

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【Gin】(五)Go语言ORM框架Gorm-连接MySQL

gorm是一个使用Go语言编写的ORM框架。它文档齐全,对开发者友好,支持主流数据库。gorm官方中文文档:https://gorm.io/zh_CN/docs/

1387

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

gin使用Mysql连接池用法

本文介绍了如何在Gin框架中高效使用MySQL连接池的实用方法。通过连接池技术重用数据库连接,可以显著提升性能并降低资源消耗。文章详细演示了从安装Gin和MySQL驱动、配置连接池参数到实现简单API的完整流程,并提供了具体代码示例。连接池的优势包括性能提升、更好的资源管理和更高的应用可扩展性,适用于需要频繁数据库访问的Web应用开发。

十年砍柴的博客 1105

Gin实战:Gin+Mysql简单的Restful风格的API

  我们已经了解了Golang的Gin框架。对于Webservice服务,restful风格几乎一统天下。Gin也天然的支持restful。下面就使用gin写一个简单的服务,麻雀虽小,五脏俱全。我们先以一个单文件开始,然后再逐步分解模块成包,组织代码。 It works 使用Gin的前提是安装,我们需要安装gin和mysql的驱动,具体的安装方式就不在赘述。可以参考Golang 微框架Gin...

秋天的博客 3439

gin mysql 连接池_Golang 的Gin异步框架入门种简单例子

介绍Gin 是一个用 Go (Golang) 编写的 HTTP web 框架。 它是一个类似于 martini 但拥有更好性能的 API 框架, 由于 httprouter,速度提高了近 40 倍。如果你需要极好的性能,使用 Gin 吧。安装框架配置好GOPATH,建议自己在GOPATH建个项目,这里我以http://aze.org作为项目目录。$ go get github.com/gin-go...

weixin_36199904的博客 1474

【Gin框架入门到精通系列05】Gin连接数据库

本文深入介绍Gin框架与数据库的交互技术,包括Go语言操作MySQL的多种方式、GORM框架的基础知识、数据模型定义与表结构映射、CRUD操作、关联关系处理、事务管理与性能优化等内容,帮助开发者快速掌握Gin项目中数据库集成的全方位技能。

GopherTribe的博客 1431

gin-gorm-mysql保姆级教程

序言项目初始化:首先着手创建一个新的Go项目,确保具备进行后续开发工作的基础框架。CRUD实现:在构建的Go项目中,使用gorm着手实现一组用于MySQL数据的crud操作。此阶段涵盖了创建(Create)、检索(Read)、更新(Update)与删除(Delete)功能的完整实现,确保每个接口均能准确对应相应的数据操作。CRUD接口实现:在构建的Go项目中,使用gin着手实现一组用于模拟数据操作的RESTful API接口。

weixin_60597554的博客 1881

mysql例子 restful_Gin实战:Gin+Mysql简单的Restful风格的API

我们已经了解了Golang的Gin框架。对于Webservice服务,restful风格几乎一统天下。Gin也天然的支持restful。下面就使用gin写一个简单的服务,麻雀虽小,五脏俱全。我们先以一个单文件开始,然后再逐步分解模块成包,组织代码。It works使用Gin的前提是安装,我们需要安装gin和mysql的驱动,具体的安装方式就不在赘述。可以参考Golang 微框架Gin简介和Gola...

weixin_39803977的博客 215

Gin之GORM 操作数据库(MySQL)

GORM 是 Golang 的一个 orm 框架。简单说,ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,是"对象-关系映射"(Object/Relational Mapping) 的缩写。使用 ORM框架可以让我们更方便的操作数据库。

阿澈不吃蒜的博客 3189
上一篇: Gin(四):表单提交校验和模型绑定
下一篇: Gin(六):文件上传
代码猎奇站
博客等级 码龄7年 39粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值