Database/sql 及 GORM 相关解读 | 青训营笔记

106 阅读2分钟

database/sql 是 Go 标准库中提供的对数据库访问的抽象接口,它可以通过实现 driver 接口来支持多种数据库。使用 database/sql 可以轻松地开发基于 Go 的数据库应用程序,同时保证了代码的可移植性。

database/sql 主要由 DBStmt 两个类型组成。其中,DB 类型代表一个数据库连接,它可以通过 Open 函数打开一个新的数据库连接;Stmt 类型则表示了一条 SQL 语句的执行计划,可以通过 Prepare 函数创建并执行。除了这些基本类型之外,database/sql 还提供了一系列方便的操作函数来简化开发工作。

database/sql 相关的 ORM 框架中,比较流行的就是 GORM。GORM 为 Go 开发者提供了高度可扩展和灵活的接口,使得 Go 开发者可以更容易地使用数据库。GORM 支持多种数据库,包括 MySQL、PostgreSQL、SQLite 和 SQL Server 等。与 database/sql 不同的是,GORM 提供了可读性更好、更易于维护的代码风格,同时也提供了更加高级的功能。例如,GORM 提供了强大的 ORM 功能,使得数据表结构映射到 Go 语言的结构体非常方便。此外,GORM 还支持事务处理、批量操作、自动创建数据表等高级功能。

下面是一个使用 GORM 连接 MySQL 数据库的例子:

复制代码
package main

import (
    "fmt"
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
)

type User struct {
    gorm.Model
    Name string
    Age  int
}

func main() {
    dsn := "root:password@tcp(127.0.0.1:3306)/test_db?charset=utf8mb4&parseTime=True&loc=Local"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
        panic("failed to connect database")
    }
    fmt.Println("Database connected successfully!")
    db.AutoMigrate(&User{})
    user := User{Name: "Tom", Age: 18}
    db.Create(&user)
    var result User
    db.First(&result, user.ID)
    fmt.Println(result.Name, result.Age)
}

在这个例子中,我们首先使用 mysql.Open 函数打开了一个 MySQL 数据库连接,然后通过调用 AutoMigrate 函数将 User 模型映射到数据库。接着,我们创建了一个新的用户并将其保存到数据库中。最后,我们使用 First 函数从数据库中读取到了刚刚创建的用户,并输出其姓名和年龄。

需要注意的是,本例中我们使用了 GORM 提供的自动迁移功能,它会自动地在数据库中创建相应的表。同时,我们还使用了 GORM 内置的 CRUD 函数,如 CreateFirst,以便更加方便地操作数据库。