GORM(Go 的 ORM 库)连接数据库,并实现增删改查操作 | 青训营

37 阅读2分钟

什么是GORM

gorm是一个强大的Go编程语言中的ORM(对象关系映射)库。ORM是一种技术,它将数据库表中的数据映射到面向对象的模型中,从而简化了数据库操作。有简单易用、支持多种数据库、自动迁移、事务支持和强大的查询功能。

GORM的基本使用

定义GORM MODEL

定义一个struct,在struct内定义和要连接的表相同的字段。

  • GORM使用名为ID的字段作为主键
  • 使用结构体的蛇形复数作为表名
  • 字段的蛇形作为列名 用 func(m Model)TableName() string{}返回表名,来定义连接表的名字。如果没有gorm会默认为结构体名字

连接数据库

使用mysql.open("user:password@tcp(127.0.0.1:3306)/dbname",&gorm.Config{}) 来连接数据库。dbname后面的字段和其他连接字段类似。但是注意内容类似,但是表达的符号可能不同,建议搜索。

创建数据db.Create()

  • 可以先给一个变量赋值,然后放入语句中
  • 可以直接在语句中创建变量
  • 可以传入数组创建一串数据
  • 创建数据的error要从创建数据返回值用.Error 来获取
  • 用clause.OnConflict处理数据冲突
  • 可以使用default标签为字段定义默认值

查询数据

  1. 可以使用db.First()
  2. 可以使用db.Where().Find() 要注意:
  • 使用first只会返回查询到的第一条数据
  • first查询不到数据会返回ErrRecordNotFound,用find不会
  • 可以使用结构体来作为查询条件
  • 语句内要传入的值用?代替,在where语句中用,分割每个要传入的数据
  • 结构体作为条件查询时,GORM只会查询非零值字段
  • 想传入零值(包括false、“”)要使用map来构建查询条件
  • 查到数组要循环才能打印里面的值

更新数据

db.Model().Where().Update()

  • 和查询类似,但是model里面传入要更改的结构体
  • 用struct更新时只会更新非零值
  • 更新零值用map或者用select选择字段

删除数据

db.Delete()

  • 可以加where,也可以不加
  • 有物理删除和软删除两种,软删除用DeleteAt
  • 用Unscope查询软删除的数据

事务

  • Begin
  • Commit
  • Rollback
  • Transaction
  • Hook

性能提高

可以通过关闭默认事务,缓存预编译语句来提高性能