这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
gorm使用
定义表与为表定义表名
type Man struct {
ID uint `gorm:"primarykey"` //定义为主键
Name string `gorm:"column:name"` //数据库列名为code
Sex String
} //定义gorm model
func (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 框架