Go框架三件套介绍
1.Gorm
Gorm是一个已经选代了10年+的功能强大的ORM框架,在字节内部被广泛使用并拥有非常丰富的开源扩展。GORM目前支持MySQL、SQLServer、PostgresQL、SQLite。
GORM通过驱动来连接数据库,如果需要连接其它类型的数据库,可以复用/自行开发驱动
2.Kitex
Kitex是字节内部的Golang微服务RPC框架,具有高性能、强可扩展的主要特点,支持多协议并拥有丰富的开源扩展
3.Hertz
Hertz是字节内部的HTTP框架参考了其他开源框架的优势,结合字节跳动内部的需求,具有高易用性、高性能、高扩展性特点
Gorm特性
- 全功能 ORM
- 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承)
- Create,Save,Update,Delete,Find 中钩子方法
- 支持
Preload、Joins的预加载 - 事务,嵌套事务,Save Point,Rollback To Saved Point
- Context、预编译模式、DryRun 模式
- 批量插入,FindInBatches,Find/Create with Map,使用 SQL 表达式、Context Valuer 进行 CRUD
- SQL 构建器,Upsert,数据库锁,Optimizer/Index/Comment Hint,命名参数,子查询
- 复合主键,索引,约束
- Auto Migration
- 自定义 Logger
- 灵活的可扩展插件 API:Database Resolver(多数据库,读写分离)、Prometheus…
- 每个特性都经过了测试的重重考验
- 开发者友好
Gorm的基本使用
1.定义 gorm model
GORM 定义一个 gorm.Model 结构体,包含字段Code、Price
type Product struct{
Code string
Price uint
}
2.为model 定义表名
将表的名字定义为product
func (p Product) TableName() string {
return "product"
}
3.连接数据库
在go中通过gorm.open方法进行数据库的连接操作
func main(){
db,err := gorm.open(mysql.0pen(dsn:"user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"), &gorm.Config{})
if err I= nil {
panic(v:"failed to connect database")
}
4.增删改查
在go中使用Create()方法创建数据,Delete()方法删除数据
// Create创建数据
db.Create(&Product{Code:"D42",Price:100})
// Read查询数据
var product Product
db.First(&product,conds..1)//根据整形主键查找
db.First(&product, conds.."code=?",“D42")//查找 code 字段值为D42的记录
// Update-将 product 的 price 更新为 208
db.Model(&product).Update(column:"Price",value:208)
//Update—更新多个字段
db.Model(&product).Updates(Product{Price:200, Code:"F42"})//仅更新非零值字段
db.Model(&product).Updates(map[string]interface{}{"Price": 208, "Code":"F42"})
// Delete -删除 product
db.Delete(6product, conds...:1)
First使用踩坑:
使用First时,需要注意查询不到数据会返回ErrRecordNotFound
使用Find查询多条数据,查询不到数据不会返回错误
用结构体作为查询条件:当使用结构作为条件查询时,GORM 只会查询非零值字段。这意味看如果您的字段值为0、、false或其他值该字段不会被用于构建查询条件,使用Map来构建查询条件
GORM提供了gorm.DeletedAt用于帮助用户实现软册 拥有软删除能力的Model调用Delete时,记录不会被 从数据库中真正删除,但GORM会将DeletedAt为兰前时间,并且你不能再通过正常的查询方法找到该记录