实践:使用GORM完成对数据库的操作 | 青训营

508 阅读6分钟

实践:使用GORM完成对数据库的操作 | 青训营

1、GORM介绍

​ GORM(Go Object-Relational Mapping)是 Go 语言中一款强大的 ORM(对象关系映射)库,它提供了一种方便的方式来操作数据库,将对象和数据库之间的映射关系抽象化,使开发者能够更轻松地进行数据库操作。GORM允许开发者通过Go语言结构体来定义实体模型,在操作数据库不用直接编写SQL语句,提高了开发效率。

​ 在本次实践中,我们将了解如何使用GORM连接MySQL数据库,并对其进行CRUD操作。

2、Gorm的安装以及数据库连接的配置

(1)GORM的安装

go get -u github.com/go-gorm/gorm

(2)在代码中引入GORM包

import "github.com/go-gorm/gorm"

(3)数据库连接配置

db, err := gorm.Open("mysql", "username:password@tcp(127.0.0.1:3306)/dbname?charset=utf8&parseTime=True&loc=Local")
if err != nil {
    log.Fatal(err)
}

​ 这段代码用于建立与 MySQL 数据库的连接,并使用 GORM 进行数据库操作。

  • db:这是 GORM 打开数据库连接后的数据库句柄,它将用于执行数据库操作。

  • err:这是一个错误变量,用于捕获 gorm.Open 方法在连接数据库时可能出现的错误。

  • gorm.Open("mysql", "username:password@tcp(127.0.0.1:3306)/dbname?charset=utf8&parseTime=True&loc=Local")

    • gorm.Open:这是 GORM 提供的打开数据库连接的方法。

    • "mysql":这是指定要使用的数据库驱动类型,这里是 MySQL。

    • "username:password@tcp(127.0.0.1:3306)/dbname?charset=utf8&parseTime=True&loc=Local"
      

      数据库连接字符串包括以下信息:

      • username:你的 MySQL 数据库用户名。
      • password:你的 MySQL 数据库密码。
      • tcp(127.0.0.1:3306):数据库服务器的地址和端口号,这里是本地地址和默认 MySQL 端口号。
      • dbname:你要连接的数据库名。
      • charset=utf8:指定字符集为 UTF-8,以支持多语言字符。
      • parseTime=True:使 GORM 能够自动解析时间类型。
      • loc=Local:设置时间的默认时区为本地时区。
  • if err != nil { log.Fatal(err) }

    • 这是一个错误检查语句。如果在连接数据库时出现错误,将执行 log.Fatal(err),即将错误信息打印并终止程序运行。

3、实体模型的定义

(1)我们定义了一个名为 User 的结构体,它包含了 gorm.Model 嵌入字段,用于自动生成通用的字段(ID、创建时间、更新时间等)。另外,我们还定义了 Username、Email 和 Age 字段,分别用于映射数据库表中的列。

package main

import (
	"github.com/go-gorm/gorm"
)

type User struct {
	gorm.Model
	Username string
	Email    string
	Age      int
}

(2)数据库表迁移操作

​ 在 GORM 中,可以使用 AutoMigrate 方法来进行简单的数据库迁移操作。对于更复杂的迁移,可能需要使用 GORM 提供的其他迁移工具或结合其他工具来管理。

func main() {
	db, err := gorm.Open("mysql", "username:password@tcp(127.0.0.1:3306)/dbname?charset=utf8&parseTime=True&loc=Local")
	if err != nil {
		log.Fatal(err)
	}
	db.AutoMigrate(&User{})
}

​ 我们导入了 MySQL 驱动,并通过 db.AutoMigrate(&User{}) 将 User 结构体对应的表生成到数据库中。确保替换连接字符串中的用户名、密码、数据库名等信息。使用上述代码,它将根据我们的模型定义自动创建对应的 MySQL 表结构。以下是在MySQL数据库中生成User模型对应表结构的SQL语句:

CREATE TABLE users (
  id BIGINT NOT NULL AUTO_INCREMENT,
  created_at DATETIME,
  updated_at DATETIME,
  deleted_at DATETIME,
  username VARCHAR(255),
  email VARCHAR(255),
  age INT,
  PRIMARY KEY (id)
);

4、基本数据库操作

(1)查询

​ 当针对 GORM 中的模型进行查询操作时,我们可以使用 GORM 提供的查询方法和条件构造器来实现。以下是一些常见的查询操作示例:

// 查询所有用户
db.Find(&users)

// 根据条件查询用户
var user User
db.Where("username = ?", "john").First(&user)

// 多个条件的查询
var users []User
db.Where("age > ?", 18).Where("email LIKE ?", "%example.com").Find(&users)

// 排序查询结果
db.Order("age DESC").Find(&users)

// 限制查询结果数量
db.Limit(10).Find(&users)

// 分页查询
page := 2
pageSize := 10
offset := (page - 1) * pageSize
db.Offset(offset).Limit(pageSize).Find(&users)

(2)增加

​ 当针对 GORM 中的模型进行增加数据操作时,我们可以使用 GORM 提供的创建(Create)和保存(Save)方法来实现。以下是一些常见的增加操作示例:

// 创建并插入单个用户
user := User{
    Username: "newuser",
    Email:    "newuser@example.com",
    Age:      25,
}
db.Create(&user)

// 批量插入多个用户
users := []User{
    {Username: "user1", Email: "user1@example.com", Age: 30},
    {Username: "user2", Email: "user2@example.com", Age: 28},
}
db.Create(&users)

(3)删除

​ 在 GORM 中,删除数据可以使用 Delete方法来执行。以下是一些常见的删除操作示例:

// 根据主键删除单个用户
var user User
db.First(&user)
db.Delete(&user)

// 根据条件删除多个用户
db.Where("age < ?", 18).Delete(&User{})

(4)更新

​ 在 GORM 中,更新数据可以使用 Save 或 Update 方法来执行。以下是一些常见的更新操作示例:

// 更新已有记录
var user User
db.First(&user)
user.Age = 30
db.Save(&user)

// 根据条件批量更新
db.Model(&User{}).Where("age < ?", 18).Update("age", 18)

// 更新多个字段
db.Model(&user).Updates(User{Age: 25, Email: "updated@example.com"})

// 更新选定字段
db.Model(&user).Select("Age").Updates(map[string]interface{}{"Age": 26})

5、实践总结

​ 在本次实践中,我深入学习了 GORM,这是一款强大的 Go 语言 ORM 库,用于简化数据库操作。通过这次实践掌握了以下要点:

  • 安装与连接: 通过安装 GORM 包,我能够轻松建立与数据库的连接。连接字符串包含了数据库的地址、认证信息和其他配置。
  • 模型与表结构: 通过在 Go 结构体中定义模型,可以使用 GORM 的 AutoMigrate 方法自动生成数据库表结构,简化了数据库初始化过程。
  • 增删改查: 使用 GORM,能够轻松进行增加、删除、更新和查询操作。这包括了单条记录的操作,以及条件筛选、批量操作等。
  • 高级查询: 了解了如何使用 GORM 的条件构造器,以及如何预加载关联数据,从而实现更复杂的查询需求。

​ 总而言之,这次实践让我熟悉了 GORM 的核心概念和功能,为将来的项目提供了更便捷的数据库操作方式。

6、附录

(1) GORM 官方文档:

  • GORM 官方文档:GORM 的官方文档,提供了详细的使用指南、API 文档和示例代码。

(2)GORM GitHub 仓库:

  • GORM GitHub 仓库:GORM 的开源项目仓库,包含源代码、问题跟踪和社区讨论。

(3) GORM 示例项目:

  • GORM 示例项目:官方提供的一些 GORM 示例项目,涵盖了不同类型的应用场景。

(4)GORM 官方博客:

  • GORM 官方博客:GORM 官方博客中分享了有关 GORM 使用和最佳实践的文章。