这是我参与「第五届青训营 」伴学笔记创作活动的第6天
三件套:
Gorm, Kitex, Hertz
Gorm
迭代了十余年的ORM框架
//Gorm基本使用
type Product struct{
Code string
Price uint
}//定义gorm model,对应数据库一张表
func (p Product)TableName() string{//为model定义表名
return "product" //返回表名
}
func main() {
//link to database
db,err:=gorm.Open(
mysql.Open("user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"),
&gorm.Config{})
if err!=nil{
panic("failed to connect database")
}
//Create data创建数据
db.Create(&Product{Code: "D42",Price: 100})
//read查询数据
var product Product
db.First(&product,1) //按整型主键查找,传指针;First查询单挑数据
db.First(&product,"code=?","D42")//查询code字段值为042的
//更新Product的price为200
db.Model(&product).Update("Price",200)
//更新多个字段
db.Model(&product).Updates(Product{Price: 200,Code: "F42"})//仅更新非零值
db.Model(&product).Updates(map[string]interface{}{"Price":200,"Code":"F42"})//可更新零值,用map更新
//delete删除product
db.Delete(&product,1)
}
Gorm的约定:
Gorm使用ID的字段为主键
使用的结构体的蛇形负数为表名
字段名的蛇形作为列名
使用CreatedAt, UpdatedAt字段为创建更新时间
Gorm支持的数据库
MySQL, SQL server,PostgreSQL,SQLite
连接SQLServer为例
import (
"gorm.io/driver/sqlserver"
"gorm.io/gorm"
)
dsn :="sqlserver://gorm:LoremIpsum86@localhost:9930?database=gorm"
db ,err :=gorm.Open(sqlserver.Open(dsn),&gorm.Config{})
//Goem通过驱动连接数据库,如果连接其他类型的,可复用/自行开发驱动
Kitex
字节跳动内部Golang微服务RPC框架: 高可用性, 强可扩展能力
Hertz
字节内部HTTP框架