Go语言连接数据库 GORM
首先在goland中配置GORM库,执行以下语句
// 安装MySQL依赖
go get -u gorm.io/driver/mysql
// 安装Gorm依赖
go get -u gorm.io/gorm
GORM用于将go语言的结构体于数据库表进行映射,同时进行CRUD
在Go语言代码文件中导入GORM库,以及go的MySQL依赖
import (
"gorm.io/gorm"
"gorm.io/driver/mysql"
)
接下来实现一个实例来演示 GORM的用法
定义一个user结构体,模型是一个Go语言结构体,对应数据库中的一张表,每个字段代表表中的一个列
// User 模型定义
type User struct {
ID uint `gorm:"primaryKey"`
Name string `gorm:"not null"`
Age int
CreatedAt time.Time
UpdatedAt time.Time
}
接下来进行数据库的连接
GORM的gorm.Open()方法用于打开数据库连接,并返回一个DB实例供后续操作
将连接字符串dsn替换为实际的数据库用户名、密码、主机地址、端口号和数据库名,可以选择不同的数据库驱动,这里选择mysql
// 连接数据库
dsn := "user:password@tcp(host:port)/database?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: logger.Default.LogMode(logger.Silent), // 配置gorm日志级别
})
if err != nil {
panic("Failed to connect to database")
}
创建一个结构体实例并使用db.Create(&user)方法插入到数据库中。GORM利用结构体的字段和标签来自动构建SQL语句
func CreateUser(db *gorm.DB, name string, age int) error {
user := User{Name: name, Age: age}
result := db.Create(&user)
if result.Error != nil {
return result.Error
}
return nil
}
迁移数据库表并创建数据库的记录
对数据库进行增删查改
GORM的AutoMigrate()方法提供了自动化的迁移功能,根据模型定义自动创建或者映射到数据库表
查询记录(Read)
查询所有记录
goCopy codefunc GetAllUsers(db *gorm.DB) ([]User, error) {
var users []User
result := db.Find(&users)
if result.Error != nil {
return nil, result.Error
}
return users, nil
}
根据ID查询记录
goCopy codefunc GetUserByID(db *gorm.DB, id uint) (*User, error) {
var user User
result := db.First(&user, id)
if result.Error != nil {
return nil, result.Error
}
return &user, nil
}
通过GORM提供的Find()、First()等方法实现。GORM会根据查询条件自动生成相应的SQL查询语句,通过结构体来接收查询结果
更新记录(Update)
goCopy codefunc UpdateUserAge(db *gorm.DB, id uint, newAge int) error {
var user User
result := db.First(&user, id)
if result.Error != nil {
return result.Error
}
user.Age = newAge
result = db.Save(&user)
if result.Error != nil {
return result.Error
}
return nil
}
首先通过First()方法查询要更新的记录,然后将结构体字段的值更新,并使用Save()方法保存回数据库。GORM会自动识别需要更新的字段,从而避免了全部更新的开销
删除记录(Delete)
goCopy codefunc DeleteUser(db *gorm.DB, id uint) error {
result := db.Delete(&User{}, id)
if result.Error != nil {
return result.Error
}
return nil
}
GORM提供了Delete()方法来删除记录,只需要传递结构体实例和ID参数,GORM会根据结构体的定义自动构建删除SQL语句
最后关闭数据库连接
// 关闭数据库连接
sqlDB, err := db.DB()
if err != nil {
panic("Failed to close database connection")
}
sqlDB.Close()
注意:
连接字符串’dsn‘需要根据数据库配置进行修改
在连接数据库时,使用连接字符串拼接用户名、密码、主机地址等连接信息。连接字符串使用双引号包裹,多行连接使用加号进行拼接。
-
命名风格:
- 在Go语言中,通常遵循驼峰命名法,例如
ConnectDB()、CreateUser()等函数名和User、Name等字段名。
- 在Go语言中,通常遵循驼峰命名法,例如
-
函数调用:
- 函数调用使用圆括号括起来,并且多个参数之间使用逗号隔开。
db, err := ConnectDB()
if err != nil {
panic("Failed to connect to database")
}