gorm使用 | 青训营笔记

73 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天

gorm使用

定义表与为表定义表名

type Man struct {
    ID uint `gorm:"primarykey"` //定义为主键
    Name string `gorm:"column:name"` //数据库列名为code
    Sex String
} //定义gorm modelfunc (m Man) TableName() string {
    return "Person"
} //为model定义表名
db.Create() //创建数据,单条数据传递结构体指针,多条数据传递切片
db.First() //查询数据
db.Where().Find(&[]*Man) //查询多条数据
db.Model(&man).Updates() //更新数据
db.Delete() //删除数据

使用结构体中名为ID的字段作为主键

使用struct更新时,只会更新非零值,如果需要更新零值可以使用Map更新或者使用Select选择字段

type Man struct {
    ID uint `gorm:"primarykey"` //定义为主键
    Name string `gorm:"column:name"` //数据库列名为code
    Sex String
    Deleted grom.DeletedAt //实现软删除
} //定义gorm model

事务

tx := db.Begin()
// 事务执行db操作时使用tx

链式方法

queryDB.Where("age > ?", 10).First(&user)
链式方法

链式方法是将 Clauses 修改或添加到当前 Statement 的方法,例如:

Where, Select, Omit, Joins, Scopes, Preload

终结方法

终结(方法) 是会立即执行注册回调的方法,然后生成并执行 SQL,比如这些方法:

Create, First, Find, Take, Save, Update, Delete, Scan, Row, Rows

终结方法后的链式方法无效,即链式方法需要在终结方法前调用

Hook

Hook是在创建、查询、更新、删除等操作之前、之后自动调用的函数

Gorm性能提高

SkipDefaultTransaction关闭默认事务,为了确保数据一致性,GORM 会在事务里执行写入操作(创建、更新、删除)。如果没有这方面的要求,可以在初始化时禁用它

PrepareStmt缓存预编译语句,PreparedStmt 在执行任何 SQL 时都会创建一个 prepared statement 并将其缓存,以提高后续的效率,如果禁止,可以提高30%的效率

db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
  SkipDefaultTransaction: true,
  PrepareStmt: false,
})

Kitex

Kitex是字节跳动内部的 Golang 微服务 RPC 框架,具有高性能强可扩展的特点

Hertz

Hertz 是一个 Golang 微服务 HTTP 框架