简单介绍:gorm是一个使用Go语言编写的ORM框架。它文档齐全,对开发者友好,支持主流数据库。主要操作是把结构类型和数据库表记录进行映射,并不需要手写sql代码,与mybatis进行对比,MyBatis并不是真正的ORM框架,只是一个半自动的SQL映射框架,提供的功能不如ORM框架强大,但是拥有更多的灵活性。 在 Go 语言中,使用 ORM(对象关系映射)库可以帮助我们更方便地处理数据库操作。GORM 是 Go 语言中一款常用的 ORM 库,提供了简单易用的 API 来连接数据库和执行增删改查操作。本文将详细介绍 GORM 的使用过程,并展示如何使用它连接数据库,并实现 CRUD(增删改查)操作。
1.概述
gorm是一个使用Go语言编写的ORM框架。它文档齐全,对开发者友好,支持主流数据库。
安装:
在开始学习前,首先要在go项目中安装GORM。可以使用go的包管理工具来安装,运行以下命令,其中 <database> 是你要使用的数据库(如 MySQL、PostgreSQL 等),使用对应的驱动来替换 <database>。
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite
2.连接数据库
连接不同的数据库都需要导入对应数据的驱动程序,GORM已经贴心的为我们包装了一些驱动程序,只需要按如下方式导入需要的数据库驱动即可: GORM 官方支持的数据库类型有: MySQL, PostgreSQL, SQlite, SQL Server
连接Mysql
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func main() {
// 参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name 获取详情
dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
}
MySQl 驱动程序提供了 一些高级配置 可以在初始化过程中使用,例如:
db, err := gorm.Open(mysql.New(mysql.Config{
DSN: "gorm:gorm@tcp(127.0.0.1:3306)/gorm?charset=utf8&parseTime=True&loc=Local", // DSN data source name
DefaultStringSize: 256, // string 类型字段的默认长度
DisableDatetimePrecision: true, // 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持
DontSupportRenameIndex: true, // 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引
DontSupportRenameColumn: true, // 用 `change` 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列
SkipInitializeWithVersion: false, // 根据当前 MySQL 版本自动配置
}), &gorm.Config{})
连接PostgreSQL
import (
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
dsn := "host=localhost user=gorm password=gorm dbname=gorm port=9920 sslmode=disable TimeZone=Asia/Shanghai"
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
在上述代码中,我们通过 gorm.Open 函数建立与数据库的连接,并返回一个 db 对象用于后续的数据库操作。
连接Sqlite3
import (
"gorm.io/driver/sqlite" // Sqlite driver based on GGO
// "github.com/glebarez/sqlite" // Pure go SQLite driver, checkout https://github.com/glebarez/sqlite for details
"gorm.io/gorm"
)
// github.com/mattn/go-sqlite3
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{})
连接SQL Server
import (
"gorm.io/driver/sqlserver"
"gorm.io/gorm"
)
// github.com/denisenkom/go-mssqldb
dsn := "sqlserver://gorm:LoremIpsum86@localhost:9930?database=gorm"
db, err := gorm.Open(sqlserver.Open(dsn), &gorm.Config{})
3.连接池
GORM 使用 database/sql 维护连接池
sqlDB, err := db.DB()
// SetMaxIdleConns 设置空闲连接池中连接的最大数量
sqlDB.SetMaxIdleConns(10)
// SetMaxOpenConns 设置打开数据库连接的最大数量。
sqlDB.SetMaxOpenConns(100)
// SetConnMaxLifetime 设置了连接可复用的最大时间。
sqlDB.SetConnMaxLifetime(time.Hour)
在这个示例中,我们定义了一个名为 User 的模型,它具有 ID、Username、Email、CreatedAt 和 UpdatedAt 等字段。
4.实现增删改查操作 在连接数据库和创建模型后,我们可以使用 GORM 实现增删改查操作。
- 查询数据 查询数据是一个常见的操作。我们可以使用 GORM 的
Find()函数来检索匹配给定条件的记录。以下是一个示例的查询代码:
go
复制代码
go
func getUsers() ([]User, error) {
var users []User
err := db.Find(&users).Error
if err != nil {
return nil, err
}
return users, nil
}
在这个示例中,我们定义了一个名为 getUsers 的函数,它返回一个 User 类型的切片。我们使用 GORM 的 Find() 函数来执行查询,并将结果存储在 users 变量中。
- 创建数据 创建数据是另一个常见的操作。我们可以使用 GORM 的
Create()函数来向数据库插入新的记录。以下是一个示例的创建数据的代码:
go
复制代码
go
func createUser(user *User) error {
err := db.Create(user).Error
if err != nil {
return err
}
return nil
}
在这个示例中,我们定义了一个名为 createUser 的函数,它接受一个指向 User 类型的指针作为参数。我们使用 GORM 的 Create() 函数来执行插入操作。
- 更新数据 更新数据是更新已存在记录的常见操作。我们可以使用 GORM 的
Save()函数来更新数据库中的记录。以下是一个示例的更新数据的代码:
go
复制代码
go
func updateUser(user *User) error {
err := db.Save(user).Error
if err != nil {
return err
}
return nil
}
在这个示例中,我们定义了一个名为 updateUser 的函数,它接受一个指向 User 类型的指针作为参数。我们使用 GORM 的 Save() 函数来执行更新操作。
- 删除数据 删除数据是删除已存在记录的常见操作。我们可以使用 GORM 的
Delete()函数来从数据库中删除记录。以下是一个示例的删除数据的代码:
go
复制代码
go
func deleteUser(user *User) error {
err := db.Delete(user).Error
if err != nil {
return err
}
return nil
}
在这个示例中,我们定义了一个名为 deleteUser 的函数,它接受一个指向 User 类型的指针作为参数。我们使用 GORM 的 Delete() 函数来执行删除操作。