会编程的土豆 • 计科学习者 个人主页 点击访问我的主页 核心专栏1 数据结构与算法 核心专栏2 LeetCode Hot 100✨ 面包会有的牛奶会有的一切都会有的一、什么是 GormGorm 是 Go 语言里最常用的 ORM 框架。ORMObject Relational Mapping 对象关系映射简单理解用 Go 代码操作数据库而不是自己手写 SQL。比如以前SELECT*FROMuser;现在可以直接写db.Find(users)这就是 ORM。二、为什么要学 Gorm如果纯手写 SQLrows,err:db.Query(select * from user)会非常麻烦。尤其项目大了以后SQL 很多表很多参数很多拼接容易出错所以开发里很多 Go 项目都会Gin Gorm MySQL这是 Go 后端最经典的组合。三、安装 Gorm安装 Gormgo get gorm.io/gorm安装 MySQL 驱动go get gorm.io/driver/mysql四、第一个 Gorm 程序1. 连接 MySQLpackagemainimport(gorm.io/driver/mysqlgorm.io/gorm)funcmain(){dsn:root:123456tcp(127.0.0.1:3306)/test?charsetutf8mb4parseTimeTruelocLocaldb,err:gorm.Open(mysql.Open(dsn),gorm.Config{})iferr!nil{panic(err)}println(数据库连接成功)}五、DSN 详解dsn:root:123456tcp(127.0.0.1:3306)/test?charsetutf8mb4parseTimeTruelocLocal含义部分作用root用户名123456密码127.0.0.1IP地址3306MySQL端口test数据库名六、模型ModelGorm 最核心的思想表 ↔ 结构体数据库表user对应 Go 结构体typeUserstruct{IDuintNamestringAgeint}七、自动建表重点db.AutoMigrate(User{})完整代码packagemainimport(gorm.io/driver/mysqlgorm.io/gorm)typeUserstruct{IDuintNamestringAgeint}funcmain(){dsn:root:123456tcp(127.0.0.1:3306)/test?charsetutf8mb4parseTimeTruelocLocaldb,err:gorm.Open(mysql.Open(dsn),gorm.Config{})iferr!nil{panic(err)}db.AutoMigrate(User{})}运行后数据库会自动创建users表。八、Gorm 默认规则结构体typeUserstruct{}默认会生成users因为 Gorm 默认结构体名复数化九、插入数据Create1. 插入单条数据user:User{Name:张三,Age:18,}db.Create(user)数据库会自动插入张三 18十、查询数据Find1. 查询全部数据varusers[]User db.Find(users)2. 查询第一条varuser User db.First(user)默认按主键查询第一条。3. 条件查询db.Where(name ?,张三).Find(users)等价于SELECT*FROMusersWHEREname张三;十一、更新数据Update1. 更新单个字段db.Model(user).Update(age,20)2. 更新多个字段db.Model(user).Updates(User{Name:李四,Age:22,})十二、删除数据Deletedb.Delete(user)按条件删除db.Where(id ?,1).Delete(User{})十三、Gorm 常见方法方法作用Create插入Find查询全部First查询第一条Where条件查询Update更新Delete删除这些就是最核心的 CRUD。十四、主键 IDtypeUserstruct{IDuint}Gorm 默认会把ID识别成主键。并且自动递增十五、结构体标签重点可以通过 tag 修改字段。typeUserstruct{IDuintNamestringgorm:size:50Ageint}指定字段名Namestringgorm:column:user_name指定主键IDuintgorm:primaryKey不允许为空Namestringgorm:not null十六、时间字段Gorm 支持自动维护时间。typeUserstruct{IDuintNamestringCreatedAt time.Time UpdatedAt time.Time}插入数据时Gorm 会自动维护创建时间更新时间十七、完整 CRUD 示例packagemainimport(fmtgorm.io/driver/mysqlgorm.io/gorm)typeUserstruct{IDuintNamestringAgeint}funcmain(){dsn:root:123456tcp(127.0.0.1:3306)/test?charsetutf8mb4parseTimeTruelocLocaldb,_: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几乎成了标配。