简介GORM 是一个用于构建 Go 语言应用程序的对象关系映射(ORM)库。它可以帮助开发人员在 Go 语言项目中更轻松地使用数据库。它支持多种数据库,包括 MySQL、PostgreSQL 和 SQLite,并提供了一组简单易用的 API,可以让开发人员使用 Go 语言的结构体来描述数据库表和字段,并通过这些结构体来执行数据库操作。并支持事务、批量操作等等。和Java的hibernate框架相似。
相关链接:
GitHub
GORM中文网
使用 安装要使用 gorm.io/gorm,首先需要安装它。可以使用 Go 语言的包管理工具 go mod 来安装:
1 2 go get gorm.io/gorm go get gorm.io/driver/mysql
安装完成后,在 Go 语言项目中就可以引入 gorm 包并使用它了。首先,需要创建一个 gorm.DB 类型的变量,用于表示与数据库的连接:
1 2 3 import "gorm.io/gorm" var db *gorm.DB
然后,使用 gorm.Open() 函数来连接到数据库:
1 2 3 4 5 db, err := gorm.Open("mysql" , "user:password@/dbname?charset=utf8&parseTime=True&loc=Local" ) if err != nil { panic ("failed to connect database" ) } defer db.Close()
其中 user 和password 为连接数据库的用户和密码,dbname 为库名,后面设置根据自己需求设置。
以下为完整实例:
创建数据库的步骤忽略,我们约定数据库名称为star-im,用户名和密码均为root。
在 项目根目录/src/test/pkg 目录下新建 test_gorm.go 测试文件,代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 package mainimport ( "fmt" "gorm.io/driver/mysql" "gorm.io/gorm" ) type TestProduct struct { gorm.Model Name string Price uint } func main () { dsn := "root:root@tcp(127.0.0.1:3306)/star-im?charset=utf8mb4&parseTime=True&loc=Local" db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) if err != nil { fmt.Println("连接数据库失败:" , err) } err = db.AutoMigrate(&TestProduct{}) if err != nil { fmt.Println("创建数据库表异常:" , err) } product := &TestProduct{Name: "奶茶" , Price: 100 } result := db.Create(product) fmt.Println("ID为:" , product.ID) fmt.Println("如果有异常,则会输出:" , result.Error) fmt.Println("返回插入记录的条数:" , result.RowsAffected) prod := db.First(&product, "name = ?" , "奶茶" ) fmt.Println("查询数:" , prod.RowsAffected) prod2 := TestProduct{} db.Where("name = ?" , "奶茶" ).First(&prod2) fmt.Println("实体:" , prod2) db.Model(&product).Update("Price" , 200 ) db.Model(&product).Updates(TestProduct{Price: 200 , Name: "蛋糕" }) db.Model(&product).Updates(map [string ]interface {}{"Price" : 200 , "Name" : "蛋糕" }) db.Delete(&product, 1 ) }
执行程序后在控制台输出如下结果:
1 2 3 4 5 ID为: 1 如果有异常,则会输出: <nil> 返回插入记录的条数: 1 查询数: 1 实体: {{1 2022-11-22 16:53:58.969 +0800 CST 2022-11-22 16:53:58.969 +0800 CST {0001-01-01 00:00:00 +0000 UTC false}} 奶茶 100}
其他更多操作请参考 GORM中文网 ,以及 约束 、连接池 、日志 等配置可根据自身需求学习设置。我在后续过程中也会讲解并设置。