Gorm+Kitex+Hertz| 青训营笔记

246 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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