这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
-
Grom迭代了十年的ORM框架,在字节内部被广泛使用,拥有丰富的开源扩展
-
Kitex是字节内部微服务RPC框架,高性能强扩展
-
Hertz是字节内部的HTTP框架
Gorm的基本使用
-
定义gorm model
-
为model定义表名
-
连接数据库 gorm.Open(mysql.Open(dsn),&gorm.Config{})
-
创造
db.Create(结构体)
-
读
db.First() 单条查询
-
根据整形主键查询
find()查询多条数据
-
更新
Update
-
db.Model(&product).Update()将Product的值更新
更新多个字段
-
删除
db.Delate()
Gorm的约定
-
Gorm使用名为ID的字段作为主键
-
使用结构体的蛇形负数作为表名
-
...At定义时间
-
Gorm目前支持MySQL,SQLServer,PostgreSQL,SQLite
-
使用clause.OnConfict处理数据冲突
-
通过defaut标签为字段定义默认值
-
First的使用踩坑,注意查询不到数据会返回ErrRecordeNotFound
-
查询多条数据,查询不到不会返回错误
-
db.Where(查询条件).Find(&Project)
-
当使用结构体作为条件查询时,GORM只会查询非零值字段,查询0,false或其他零值,使用Map来构建查询条件
-
更新同上
-
条件更新单个
-
db.Model(设置表名).Where().Update()
-
更新多个
-
db.Model().Updates(结构体)
-
选择字段更新
-
db.Model().Select().Updates()
-
SQL表达式更新gorm.Expr
-
物理删除 db.Delete()
-
软删除gorm.DeletedAt
-
记录不会从结构体中真正删除,但Gorm会将DeletedAt设置当前时间,不能通过正常查询方式找到该记录
GORM事务
- 提供Begin,Commit,Rollback
tx := db.Begin()
if err = tx.Greate(); err != nil{
tx.Rollback()
return
}
-
提供Tansaction自动提交事务,避免漏写Commit,Rollback
-
GORM提供了CURD的Hook能力
-
Hook是在创建,查询,更新,删除等操作之前,之后自动调用的函数
-
如果任何Hook返回错误,GORM将停止后续操作并回滚事务
Gorm性能提高
-
SkipDefaultTransaction关闭默认事务
-
使用PreprareStmt缓存预编译语句可以提高后续调用
-
GORM代码生成工具
Kitex
-
定义IDL
-
Kitex生成代码 kitex -module example -service example echo.thrift 命令生成代码
-
build.sh构建脚本
-
kitex_gen
-
handler.go实现IDL service
-
创建Client echo.NewClient
-
发请请求 c.Echo()
-
Kitex服务发现与注册
Hertz基本使用
- 实现服务监听8080端口并注册一个GET方法的路由函数
h := server.Default(server.WithHostPorts())
h.GET()
h.Spin()
- 提供了GET,POST,PUT,DELETE,ANY等方法注册路由
提供路由组(Group)
-
提供参数路由和通配路由,优先级静态>命名>通配
-
参数绑定 Bind Validate BindAndValidate函数用于进行参数绑定和校验
Hertz中间件
-
h.Use()注册中间件
Hertz Client
c := client.NewClient()
c.Get()
c.Post()
- 代码生成工具 Hz