Go框架三件套及Gorm基础使用| 青训营

120 阅读3分钟

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 中钩子方法
  • 支持 PreloadJoins 的预加载
  • 事务,嵌套事务,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 结构体,包含字段CodePrice

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为兰前时间,并且你不能再通过正常的查询方法找到该记录