网站首页 > 精选文章 正文
来源:械说
GORM是 Go 语言最流行的 ORM 框架,封装了 database/sql,支持自动迁移、关联关系、事务等功能,开发体验接近于高层语言的 ORM。
一、安装与初始化1. 安装 GORM 及数据库驱动go get -u gorm.io/gormgo get -u gorm.io/driver/mysql# PostgreSQL 用户:# go get -u gorm.io/driver/postgres2. 建立数据库连接packagemainimport("gorm.io/driver/mysql""gorm.io/gorm""log")funcmain { dsn :="user:password@tcp(127.0.0.1:3306)/gormdb?charset=utf8mb4&parseTime=True&loc=Local"db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})iferr !=nil{ log.Fatal("连接数据库失败:", err) } log.Println("连接成功")}
二、定义模型结构体typeUserstruct{ IDuint`gorm:"primaryKey"`NamestringEmailstring`gorm:"uniqueIndex"`AgeintCreatedAt time.Time}
- o 使用 GORM 标签配置字段属性。
- o 支持自动创建 id、created_at 等字段。
三、自动迁移表结构db.AutoMigrate(&User{})
会自动创建表,如果表存在则进行字段比对与升级(非破坏性)。
四、基本 CRUD 操作1. 新增数据user := User{Name:"Alice", Email:"alice@example.com", Age:25}db.Create(&user)fmt.Println("新ID:", user.ID)2. 查询数据varuser Userdb.First(&user,1)// 主键查询db.First(&user,"email = ?","alice@example.com")// 条件查询
- o First:查询一条
- o Find:查询多条
- o Where 支持链式调用:
varusers Userdb.Where("age > ?",20).Order("age desc").Limit(10).Find(&users)3. 更新数据db.Model(&user).Update("Name","Alice Updated")db.Model(&user).Updates(User{Name:"NewName", Age:28})// 多字段4. 删除数据db.Delete(&user)
五、条件构造器
GORM 支持各种链式条件语句:
db.Where("name LIKE ?","%alice%").Find(&users)db.Where("age BETWEEN ? AND ?",20,30).Find(&users)db.Not("name = ?","Bob").Find(&users)
六、钩子函数(Hooks)
你可以定义方法拦截模型的创建、更新、删除行为:
func(u *User) BeforeCreate(tx *gorm.DB) (errerror) { u.Name ="【新建】"+ u.Namereturn}
七、事务处理err := db.Transaction(func(tx *gorm.DB)error{iferr := tx.Create(&User{Name:"TxUser"}).Error; err !=nil{returnerr }iferr := tx.Delete(&User{},1).Error; err !=nil{returnerr }returnnil})
八、日志与调试
GORM 支持 SQL 日志:
import"gorm.io/gorm/logger"db, _ := gorm.Open(mysql.Open(dsn), &gorm.Config{ Logger: logger.Default.LogMode(logger.Info),})
九、常用配置项
- 配置
- 说明
- Create, First, Find, Delete, Update基础 CRUD
- Where, Order, Limit, Offset链式构造条件
- AutoMigrate自动建表/更新表结构
- Model(&Model{})设置操作对象
十、小结
- 功能
- 示例
- 创建表db.AutoMigrate(&User{})
- 插入db.Create(&user)
- 查询db.First, db.Where.Find
- 更新db.Model.Updates
- 删除db.Delete(&user)
- 事务db.Transaction(func)
猜你喜欢
- 2025-07-23 MySQL之数据库的设计(mysql数据库设计与应用)
- 2025-07-23 MySQL--索引(mysql索引有哪几种)
- 2025-07-23 系统整容纪:用知识来"武装"自己~认识MySQL的锁与事务
- 2025-07-23 MySQL innodb的B+树到底长什么样,为什么MySQL要这样设计?
- 2025-07-23 软网推荐:超强密码的产生与记忆(网络密码解锁软件)
- 2025-07-23 数据库——主键和唯一键的区别(mysql简述主键与唯一约束的区别)
- 2025-07-23 系统性能分析从入门到进阶(系统性能分析怎么写)
- 2025-07-23 从零开始一个完整的全栈项目(2) - 创建数据库表
- 2025-07-23 MySQL数据库之数据库约束,一文带你了解
- 2025-07-23 mysql数据库——约束(mysql中约束)
- 最近发表
- 标签列表
-
- 向日葵无法连接服务器 (32)
- git.exe (33)
- vscode更新 (34)
- dev c (33)
- git ignore命令 (32)
- gitlab提交代码步骤 (37)
- java update (36)
- vue debug (34)
- vue blur (32)
- vscode导入vue项目 (33)
- vue chart (32)
- vue cms (32)
- 大雅数据库 (34)
- 技术迭代 (37)
- 同一局域网 (33)
- github拒绝连接 (33)
- vscode php插件 (32)
- vue注释快捷键 (32)
- linux ssr (33)
- 微端服务器 (35)
- 导航猫 (32)
- 获取当前时间年月日 (33)
- stp软件 (33)
- http下载文件 (33)
- linux bt下载 (33)