Go 基础笔记——GORM的配置与使用 DAY 04| 青训营

178 阅读3分钟

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‘需要根据数据库配置进行修改

在连接数据库时,使用连接字符串拼接用户名、密码、主机地址等连接信息。连接字符串使用双引号包裹,多行连接使用加号进行拼接。

  1. 命名风格:

    • 在Go语言中,通常遵循驼峰命名法,例如ConnectDB()CreateUser()等函数名和UserName等字段名。
  2. 函数调用:

    • 函数调用使用圆括号括起来,并且多个参数之间使用逗号隔开。
db, err := ConnectDB()
if err != nil {
    panic("Failed to connect to database")
}