gorm框架基础学习

94 阅读3分钟

gorm的基本使用

安装gorm和数据库驱动

首先我们要获取工具,我们可以通过命令下载,在goland中则可以直接图形化界面下载驱动即可

shell
代码解读
复制代码

在安装环境之后下一步就是在整个系统的初始化中连接数据库

连接
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
)

dsn := "username:password@tcp(host:port)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})

  • username:数据库用户名

  • password:数据库密码

  • host:数据库服务器的 IP 地址或域名

  • port:数据库服务器端口,MySQL 默认是 3306

  • dbname:要连接的数据库名称

  • charset=utf8mb4:设置字符编码,utf8mb4 支持表情符号

  • parseTime=True:将时间字段解析为 Go 的 time.Time 类型

  • loc=Local:设置时区为本地时区

创建一个简单的 Go 项目,配置 GORM 以连接到 MySQL 数据库。

使用 GORM 时,需要定义与数据库表对应的结构体。以下是一个简单的 User 模型:

    ID       uint   `gorm:"primaryKey"`
    Name     string `gorm:"size:100"`
    Email    string `gorm:"unique"`
    Password string
}

此结构体定义了一个 User 表,其中 ID 字段为主键,Name 和 Email 字段具有不同的约束

1. 创建

使用 Create 方法可以向数据库插入新记录。

result := db.Create(&newUser)
if result.Error != nil {
    fmt.Println("创建用户失败:", result.Error)
} else {
    fmt.Println("用户创建成功,ID:", newUser.ID)
}

2. 查询

// 查询 ID 为 1 的用户
result = db.First(&user, 1)
if result.Error != nil {
    fmt.Println("查询用户失败:", result.Error)
} else {
    fmt.Printf("查询到用户: %+v\n", user)
}

// 按条件查询
result = db.Where("email = ?", "alice@example.com").First(&user)
if result.Error != nil {
    fmt.Println("按条件查询失败:", result.Error)
} else {
    fmt.Printf("按条件查询结果: %+v\n", user)
}

3. 更新

使用 Save 或 Updates 方法可以更新数据库中的记录

user.Name = "Alice Smith"
result = db.Save(&user)
if result.Error != nil {
    fmt.Println("更新用户失败:", result.Error)
} else {
    fmt.Println("用户更新成功")
}

// 使用 Updates 方法批量更新
result = db.Model(&user).Updates(User{Name: "Alice Doe", Email: "alice.doe@example.com"})
if result.Error != nil {
    fmt.Println("批量更新失败:", result.Error)
} else {
    fmt.Println("批量更新成功")
}

4. 删除

使用 Delete 方法可以删除记录。

result = db.Delete(&User{}, 1)
if result.Error != nil {
    fmt.Println("删除用户失败:", result.Error)
} else {
    fmt.Println("用户删除成功")
}

GORM 常用特性

1. 钩子函数

GORM 支持在创建、更新、删除记录时触发钩子函数。常用钩子包括 BeforeCreateAfterCreateBeforeUpdateAfterUpdate 等。

2. 事务处理

GORM 提供了对数据库事务的支持,适用于需要保证多步操作一致性的场景。

init函数与main函数

go语言中init函数用于package(包)的初始化,init函数是go语言一个重要特征。具有如下特性:

  • init函数是用于程序执行前package的初始化的函数,比如初始化包里的变量、资源初始化等。
  • 每个包可以拥有多个init函数,包的每个源文件也可以拥有多个init函数。
  • 同一个包中多个init函数的执行顺序go语言没有明确的定义。
  • 不同包的init函数按照包导入的依赖关系决定该初始化函数的执行顺序。
  • init函数不能被其他函数调用,而是在main函数执行之前(init执行顺序优于main函数),自动被调用。

main函数则是go程序的默认入口函数(主函数),与init函数具有以下区别: