本文为笔者参加字节青训营时听字节课时所做笔记。
本文目录
一、Gorm、Kitex、Hertz三件套介绍
Gorm是一个已经迭代了10年的强大的ORM框架,在字节内部被广泛使用并且拥有非常丰富的开源拓展。Gorm 是一个流行的开源对象关系映射(ORM)库,用于 Go 语言(Golang)。它提供了一种简单、高效且易于使用的方式来操作数据库,将 Go 语言中的结构体(struct)映射到数据库中的表(table),并支持多种数据库操作,如增删改查(CRUD)。
Kitex是字节内部的Golang微服务RPC框架,具有高性能、强可拓展的主要特点,支持多协议并且拥有丰富的开源拓展。
Hertz是字节内部的HTTP框架,参考了其他开源框架(比如Gin)的优势,结合字节内部的需求,具有高易用性、高性能、高拓展性的特点。
二、Gorm使用
2.1 基础使用
下面的代码中update并不会生效,原因我推测应该是Gorm 在执行更新操作时需要一个主键字段来定位要更新的记录。如果没有主键字段,Gorm 可能无法正确执行更新操作。
package main
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
// 如果 Gorm 没有找到正确的 TableName 方法,它会使用默认的表名规则,
// 即结构体名称的复数形式(Product -> products)。
// 因此,即使你定义了 TableName 方法,拼写错误也会导致 Gorm 忽略它。
type Product struct {
//定义gorm的model
Code string
Price uint
}
func (p Product) TableName() string {
return "product" // 为model定义表名
}
func main() {
//这里调用的是mysql的驱动去操作数据库
db, err := gorm.Open(mysql.Open("mysqlname:password@tcp(127.0.0.1:3306)/database_name?charset=utf8&parseTime=True&loc=Local"),
&gorm.Config{
})
if err != nil {
panic("failed to connect database")
}
// 自动迁移表结构,在 Gorm 中,自动迁移功能(AutoMigrate)用于根据结构体定义同步表结构到数据库。
db.AutoMigrate(&Product{
})
//使用指针可以避免不必要的内存拷贝,提高性能。
//将一个结构体实例保存到数据库中。传入的 &Product{Code: "D43", Price: 100} 是一个指向结构体实例的指针。
//传递一条数据的时候是对象,传递多条数据的时候是切片
db.Create(&Product{
Code: "D43", Price: 100}) //创建数据库
var product Product
//&product 是一个指针,Gorm 通过指针直接修改 product 的字段值,而不是返回一个新的副本。
//first只能查询单条记录
db.First(&product, 1) //根据整形主键进行查找
db.First(&product, "code = ?", "D43") //查找code字段值为D43的记录
//Model 方法指定要操作的模型,&product 是一个指针,Gorm 使用它来确定操作的模型
db.Model(&product).Update("Price", 200) //更新为200
db.Model(&product).Updates(Product{
Price: 200, Code: "F42"}) //仅更新非零值字段
db.Model(&product).Updates(map[string]interface{
}{
"Price": 200, "Code": "F42"}) //使用map可以达到更新零值的目的
//db.AutoMigrate(&Product{})
//db.Delete(&product, 1)
}
gorm的约定有:使用名为ID的字段作为主键(也就是如果结构体中有ID字段,那么会被gorm默认当成主键)、使用结构体的蛇形负数作为表名(没有定义TableName函数时)、字段名的蛇形作为列名、使用CreatedAt和UpdatedAt字段作为创建和更新时间。
GORM支持Mysql、SQLServer、PostgreSQL、SQLite等。

DSN 是 Data Source Name(数据源名称)的缩写,它是一个用于描述数据库连接信息的字符串。DSN 通常包含了连接数据库所需的用户名、密码、主机地址、端口、数据库名称以及其他连接参数。它在许多数据库驱动程序和框架中被广泛使用,用于简化数据库连接的配置。
DSN 的格式因数据库类型而异,但通常包括以下部分:
1、协议:指定使用的数据库协议(如 mysql://、postgres://、sqlite://、sqlserver:// 等)。
2、用户名和密码:用于认证的用户名和密码。
3、主机和端口:数据库服务器的地址和端口。
4、数据库名称:要连接的数据库名称。
5、其他参数:如字符集、超时时间等。
比如Mysql的DSN示例:
dsn := "user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
比如sqlserver的示例:
dsn := "sqlserver://gorm:password@localhost:1433?database=gorm"
GORM是通过 驱动来连接数据库,如果需要连接其他类型的数据库,可以复用/自行开发驱动进行。


1万+

被折叠的 条评论
为什么被折叠?



