Gorm的简单上手 | 青训营

127 阅读4分钟

前言

在现代Web应用程序开发中,与数据库的交互是不可避免的。GORM是一个流行的Go语言ORM库,它简化了数据库操作的过程,提供了便捷的API和强大的功能。本文将带您深入了解GORM的CRUD操作,并通过实例演示如何使用GORM轻松处理数据库。

安装和设置

首先,我们需要安装GORM库。在命令行窗口输入以下命令来安装GORM:

go get -u gorm.io/gorm

安装完成后,我们可以开始设置我们的项目。新建一个main.go源文件,复制以下代码:

package main

import (
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)
func main() {
    dsn:="root:password@tcp(127.0.0.1:3306)/gorm_democharset=utf8mb4&parseTime=True&loc=Local"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
        panic("Failed to connect to database")
    }
    defer db.Close()
}

在上面的代码中,我们使用dsn(数据源名称)来指定数据库的连接信息(请将userpasswordlocalhost3306dbname 替换为自己的参数),并使用gorm.Open方法连接到数据库。如果连接失败,将抛出一个错误,运行main.go便可以顺利的连接上你的数据库了。

Gorm配置参数

GORM提供了丰富的配置选项和参数,以满足不同的数据库需求。下面介绍一些常用的配置选项和参数:

  • gorm.Config{}:这是GORM的配置结构体,我们可以在创建数据库连接时传入该结构体来配置GORM的行为。
  • PrepareStmt:配置是否启用预编译语句,默认为true。预编译语句可以提高查询性能,但会增加内存消耗。
  • SkipDefaultTransaction:配置是否跳过默认事务,默认为false。如果设置为true,则所有查询将在单独的事务中执行。
  • NamingStrategy:配置命名策略,用于将Go结构体字段名映射到数据库列名。GORM提供了多种命名策略,如SnakeCase、LowerCase等。
  • Logger:配置日志记录器,用于记录数据库操作的日志。我们可以自定义日志记录器,也可以使用GORM提供的默认日志记录器。请看示例代码:
func main() {
    dsn := "root:password@tcp(127.0.0.1:3306)/gorm_demo?charset=utf8mb4&parseTime=True&loc=Local"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
        PrepareStmt: true,
        SkipDefaultTransaction: false,
        NamingStrategy: schema.NamingStrategy{
        SingularTable: true,
        },
        Logger: logger.Default.LogMode(logger.Info),
	})
  if err != nil {
    panic("Failed to connect to database")
	}
  defer db.Close()

在上面的代码中,我在gorm.Config{}中配置了一些常用的参数,如启用预编译语句、不跳过默认事务、使用单数表名等。我还配置了默认的日志记录级别为Info。

定义模型和迁移

在GORM中,我们需要定义模型来映射数据库表。让我们创建一个User模型,并使用迁移功能创建对应的数据库表:

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

func main() {
	// 连接数据库的代码...
	// 迁移数据库表
	db.AutoMigrate(&User{})
}

在上面的代码中,我定义了一个User结构体,并嵌入了gorm.Model,它包含了一些常用的字段,如ID、CreatedAt和UpdatedAt。然后,我们使用db.AutoMigrate方法自动迁移数据库表,确保表的结构与模型一致。(使用db.AutoMigrate方法,假如结构体是由两个及以上单词组成,则所有单词会小写并且在单词与单侧之间会加上"_"且最后一个单词为复数形式) 若想避免此方法,可以使用TableName方法映射表名,例如如下代码:

type User struct {
	gorm.Model
	Name  string
	Email string
	Age   int
}
func (User) TableName() string {
    return "user"
}

上面代码就将User结构体与user表相对应了起来。

简单的CRUD操作

通过一个简单的例子介绍在Gorm中的CRUD操作

func main() {
	// 连接数据库的代码...

	// 创建用户
	user := User{Name: "John Doe", Email: "john@example.com"}
	db.Create(&user)

	// 查询用户
	var result User
	db.First(&result, 1) // 根据ID查询第一个用户

	// 更新用户
	db.Model(&result).Update("Email", "new_email@example.com")

	// 删除用户
	db.Delete(&result)
}

上面代码介绍了简单的CRUD操作,可以快速入门,更高级的操作请参考gorm官方文档。

总结

对我来说,GORM 是一个非常强大和灵活的 ORM 库,它简化了与数据库的交互过程。它提供了丰富的功能和方法,使得在 Go 语言中进行数据库操作变得更加容易和高效。GORM 的链式调用和自动映射功能使得编写数据库查询和操作变得更加简洁和直观。此外,GORM 还支持事务处理、关联关系、预加载等高级功能,使得处理复杂的数据库操作变得更加方便。总的来说,GORM 是一个非常值得学习和使用的 ORM 库,它可以大大提高开发人员的生产力和代码质量。