使用 GORM(Go 的 ORM 库)连接数据库并实现增删改查操作 | 青训营

75 阅读3分钟

使用 GORM 连接数据库并实现增删改查操作

一、Gorm 介绍

Gorm 是一个 Go 语言的 ORM(对象关系映射)库,它使用 Go 语言的方式处理数据库操作。Gorm 支持多种数据库,包括 MySQL、PostgreSQL、SQLite、MSSQL 等。

Gorm 具有以下特点:

自动迁移:Gorm 具有强大的自动迁移功能,可以根据定义的模型自动创建、修改数据库表结构。

事务支持:Gorm 支持事务操作,保证了数据库操作的原子性和一致性。

自动生成代码:Gorm 可以根据数据库表结构自动生成对应的实体类和数据访问对象(DAO)。

自动映射:Gorm可 以将数据库表中的数据自动映射到对应的实体类属性上,实现数据的持久化存储。

动态类型查询:Gorm 支持使用 Groovy 语言的动态类型查询,使得查询语句更加简洁易读。

二、准备工作

首先,我们需要在Go项目中安装GORM库。打开终端,进入项目目录,执行以下命令:

go get -u gorm.io/driver/mysql

go get -u gorm.io/gorm

三、Gorm连接数据库

在完成准备工作后,我们可以在代码中引入 GORM 库,并使用以下语句初始化数据库连接:

package main

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

var DB *gorm.DB

type config struct {
	user   string
	pass   string
	adrr   string
	port   string
	dbname string
}

func main() {

	conf := &config{
		user:   "root",   // 用户名
		pass:   "12345",   // 密码
		adrr:   "127.0.0.1",   // 地址
		port:   3306,   // 端口
		dbname: "test", // 数据库名称
	}
	// 加载数据库连接的链接
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%v)/%s?charset=utf8&parseTime=True&loc=Local", conf.user, conf.pass, conf.adrr, conf.port, conf.dbname)

	// 连接数据库
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
		PrepareStmt:            true, // 开启预编译
		SkipDefaultTransaction: true, // 跳过默认事务
	})
        
	if err != nil {
		panic("数据库连接失败" + err.Error())
	}

	//配置连接池
	sqlDB, err := db.DB()
	sqlDB.SetMaxIdleConns(20)           // 设置最大空闲连接数
	sqlDB.SetMaxOpenConns(100)          // 设置最大打开连接数
	sqlDB.SetConnMaxLifetime(time.Hour) // 设置连接最大生命周期

	// 连接成功
	DB = db
	fmt.Println("数据库连接成功")
}

在上述代码中,mysql.Open(dsn) 函数中 dsn 参数是数据库连接的信息,其中包括数据库名、用户名、密码、数据库地址、端口号以及数据库连接的参数配置等;gorm.Open 函数是发起对数据库的连接;

四、Gorm模型定义

我们需要创建一个数据模型,来映射数据库中的表。假设我们有个User表,对应模型及字段如下:

package entity

// 用户表
type User struct {
	Id       int64    `gorm:"primaryKey"`
	Name     string   `gorm:"default:name"`
	Age      string   `gorm:"default:age"`
}

// 映射数据库表名
func (user User) TableName() string {
	return "users"
}

五、GORM 对数据库的操作

1. 创建数据

创建一条用户数据(id为1,name为小白,age为20),代码如下:

user := User{Id: 1, Name: "小白", Age: 20}
// 增加用户
err := DB.Create(user).Error;
if err != nil {
	//创建失败
	fmt.Println(err)
}

2. 查询数据

查询我们刚才创建好的,id为1的用户数据,Where()函数用于设置查询条件,Find()函数用于执行查询操作。

// 根据id查询用户
User := entity.User{}
err := DB.Where("id = ?", 1).First(&User).Error;
if  err != nil {
	//查询失败
	fmt.Println(err)
}

3. 更新数据

将ID为1的用户的名字为“菜鸟”。Model()函数用于设置要更新的记录,Update()函数用于更新记录中的字段。

// 修改用户信息
user := User{ID: 1, Name: "菜鸟"}
err := db.Model(&user).Update("name", "菜鸟")
if err != nil {
	//更新失败
	fmt.Println(err)
}

4. 删除数据

删除ID为1的记录。

// 通过id删除用户
err := DB.Where("id = ?", 1).Delete(&entity.User{}).Error;
if  err != nil {
	//删除失败
	fmt.Println(err)
}

总结

Gorm 是一个轻量级的 Go 语言 ORM 库,具有灵活的数据库操作、自动数据库迁移、关联查询、事务支持、插件支持等特点。

Gorm 适用于各种规模的 Go 项目,无论是小型项目还是大型项目都可以使用 Gorm 来进行数据库操作。