什么是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标签为字段定义默认值
查询数据
- 可以使用db.First()
- 可以使用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
性能提高
可以通过关闭默认事务,缓存预编译语句来提高性能