当前位置: 首页 > news >正文

Gorm 入门笔记(Go 操作 MySQL 必学)

会编程的土豆 • 计科学习者
🔥 个人主页: 点击访问我的主页
📘 核心专栏1: 数据结构与算法
📘 核心专栏2: LeetCode Hot 100
✨ 面包会有的,牛奶会有的,一切都会有的!

一、什么是 Gorm

Gorm 是 Go 语言里最常用的 ORM 框架。

ORM:

Object Relational Mapping 对象关系映射

简单理解:

用 Go 代码操作数据库,而不是自己手写 SQL。

比如以前:

SELECT*FROMuser;

现在可以直接写:

db.Find(&users)

这就是 ORM。


二、为什么要学 Gorm

如果纯手写 SQL:

rows,err:=db.Query("select * from user")

会非常麻烦。

尤其项目大了以后:

  • SQL 很多
  • 表很多
  • 参数很多
  • 拼接容易出错

所以开发里:

很多 Go 项目都会:

Gin + Gorm + MySQL

这是 Go 后端最经典的组合。


三、安装 Gorm

安装 Gorm:

go get gorm.io/gorm

安装 MySQL 驱动:

go get gorm.io/driver/mysql

四、第一个 Gorm 程序

1. 连接 MySQL

packagemainimport("gorm.io/driver/mysql""gorm.io/gorm")funcmain(){dsn:="root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"db,err:=gorm.Open(mysql.Open(dsn),&gorm.Config{})iferr!=nil{panic(err)}println("数据库连接成功")}

五、DSN 详解

dsn:="root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"

含义:

部分作用
root用户名
123456密码
127.0.0.1IP地址
3306MySQL端口
test数据库名

六、模型(Model)

Gorm 最核心的思想:

表 ↔ 结构体

数据库表:

user

对应 Go 结构体:

typeUserstruct{IDuintNamestringAgeint}

七、自动建表(重点)

db.AutoMigrate(&User{})

完整代码:

packagemainimport("gorm.io/driver/mysql""gorm.io/gorm")typeUserstruct{IDuintNamestringAgeint}funcmain(){dsn:="root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"db,err:=gorm.Open(mysql.Open(dsn),&gorm.Config{})iferr!=nil{panic(err)}db.AutoMigrate(&User{})}

运行后:

数据库会自动创建:

users

表。


八、Gorm 默认规则

结构体:

typeUserstruct{}

默认会生成:

users

因为 Gorm 默认:

结构体名复数化

九、插入数据(Create)

1. 插入单条数据

user:=User{Name:"张三",Age:18,}db.Create(&user)

数据库会自动插入:

张三 18

十、查询数据(Find)

1. 查询全部数据

varusers[]User db.Find(&users)

2. 查询第一条

varuser User db.First(&user)

默认按主键查询第一条。


3. 条件查询

db.Where("name = ?","张三").Find(&users)

等价于:

SELECT*FROMusersWHEREname='张三';

十一、更新数据(Update)

1. 更新单个字段

db.Model(&user).Update("age",20)

2. 更新多个字段

db.Model(&user).Updates(User{Name:"李四",Age:22,})

十二、删除数据(Delete)

db.Delete(&user)

按条件删除

db.Where("id = ?",1).Delete(&User{})

十三、Gorm 常见方法

方法作用
Create插入
Find查询全部
First查询第一条
Where条件查询
Update更新
Delete删除

这些就是最核心的 CRUD。


十四、主键 ID

typeUserstruct{IDuint}

Gorm 默认会把:

ID

识别成主键。

并且:

自动递增

十五、结构体标签(重点)

可以通过 tag 修改字段。

typeUserstruct{IDuintNamestring`gorm:"size:50"`Ageint}

指定字段名

Namestring`gorm:"column:user_name"`

指定主键

IDuint`gorm:"primaryKey"`

不允许为空

Namestring`gorm:"not null"`

十六、时间字段

Gorm 支持自动维护时间。

typeUserstruct{IDuintNamestringCreatedAt time.Time UpdatedAt time.Time}

插入数据时:

Gorm 会自动维护:

  • 创建时间
  • 更新时间

十七、完整 CRUD 示例

packagemainimport("fmt""gorm.io/driver/mysql""gorm.io/gorm")typeUserstruct{IDuintNamestringAgeint}funcmain(){dsn:="root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"db,_:=gorm.Open(mysql.Open(dsn),&gorm.Config{})db.AutoMigrate(&User{})// 插入user:=User{Name:"张三",Age:18,}db.Create(&user)// 查询varusers[]User db.Find(&users)fmt.Println(users)}

十八、Gorm 第一阶段学什么

很多人刚学 Gorm:

直接开始:

  • 联表
  • 事务
  • 关联关系
  • 钩子函数

结果:

越学越乱。

第一阶段真正要掌握:

1. 连接数据库 2. 模型结构体 3. AutoMigrate 4. CRUD 5. Where条件查询

把这些熟练:

已经能开始写接口了。


十九、总结

Gorm 的核心思想:

结构体 ↔ 数据库表

你会发现:

以后很多数据库操作:

不再需要自己写 SQL。

而是:

db.Create()db.Find()db.Where()db.Update()db.Delete()

这也是为什么:

Go Web 开发里:

Gin + Gorm

几乎成了标配。

http://www.jsqmd.com/news/798487/

相关文章:

  • 论文AI率太高怎么救?答辩前1周降AI率完整攻略+不延期方案!
  • 基于遗传算法与Matlab-XFOIL接口的翼型气动外形自动化寻优
  • YOLOv11 改进 - 注意力机制 Gather-Excite 聚集-激发注意力:空间上下文聚合与重校准优化多尺度目标检测
  • 艾尔登法环黑夜君临修改器2026.5.11最新中文汉化版免费下载 转存后自动更新 (看到请立即转存 资源随时失效)
  • 【NotebookLM Audio Overview深度体验报告】:20年AI工具评测专家亲测,这5个语音功能正在重构知识管理 workflow
  • d2s-editor终极指南:5分钟学会暗黑破坏神2存档编辑
  • 别再让专利证书变废纸!手把手教你用6步法写出能维权的权利要求书
  • 20252419 实验三《Python程序设计》实验报告
  • 如何高效下载番茄小说:本地保存与格式转换完整指南
  • 别急着装DevEco Studio!先搞定Node.js 14.15.3 LTS,鸿蒙开发环境搭建第一步
  • 视频里的中文字幕怎么去掉?短剧出海最容易被低估的一步
  • VRM与VRChat虚拟化身双向转换:打破平台壁垒的完整解决方案
  • 20254217 实验三《Python程序设计》实验报告
  • Tabletop Simulator备份神器:3分钟学会永久保存你的桌游资产
  • SAP ABAP开发必看:FOR ALL ENTRIES性能翻倍的隐藏参数rsdb/max_blocking_factor实战调优
  • 深度解析:Visual C++ Redistributable版本检测与自动化管理完整方案
  • 41_《智能体微服务架构企业级实战教程》智能助手主应用服务之创建FastMCP客户端
  • 终极指南:如何用ViGEmBus虚拟手柄驱动解决Windows游戏手柄兼容性问题
  • 别再死记硬背C#反射语法了!用Unity编辑器扩展实战,5分钟搞懂反射到底怎么用
  • YOLOv11 改进 - 注意力机制 ESC (Emulating Self-attention with Convolution) 卷积模拟自注意力:增强小目标与密集场景检测 ICCV 2025
  • 城通网盘下载加速终极指南:如何免费突破100KB/s限制的3种高效方案
  • 终极歌词获取方案:163MusicLyrics让你轻松获取网易云和QQ音乐LRC歌词
  • RISC-V工具链实战:从源码编译到跨架构程序运行
  • Midjourney V6与DALL-E 3深度横评:从提示词容错率、中文理解力、商业版权合规性到渲染速度——实测数据全公开
  • WarcraftHelper:5分钟解决魔兽争霸III兼容性问题的终极方案
  • 实战指南:3个技巧让你的Typora写作效率提升300%
  • 如何用wxauto实现微信消息自动转发到钉钉/企业微信:3步搭建跨平台消息同步系统
  • Oracle数据库深度解析:从入门到精通的全面指南
  • 抖音批量下载终极方案:告别手动保存,10倍效率提升
  • AC鸭的迷宫按钮