GORM使用和实践心得

83 阅读2分钟

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

以下是使用 GORM(Go 的 ORM 库)连接数据库并实现基本增删改查操作的完整实现过程, 1.初始化项目:

mkdir gorm-crud-demo

cd gorm-crud-demo

go mod init gorm-crud-demo

2.安装 GORM 和驱动程序(以 MySQL 为例):

go get -u gorm.io/gorm

go get -u gorm.io/driver/mysql

3.在 MySQL 中创建一个数据库:

CREATE DATABASE gorm_demo; USE gorm_demo;

4.连接数据库


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

// User 模型
type User struct {
	ID    uint   `gorm:"primaryKey"`
	Name  string `gorm:"size:100;not null"`
	Email string `gorm:"size:100;unique;not null"`
	Age   int    `gorm:"not null"`
}

// 数据库连接
func connectDB() *gorm.DB {
	dsn := "username:password@tcp(127.0.0.1:3306)/gorm_demo?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		log.Fatalf("数据库连接失败: %v", err)
	}
	return db
}

func main() {
	db := connectDB()

	// 自动迁移模型
	err := db.AutoMigrate(&User{})
	if err != nil {
		log.Fatalf("迁移失败: %v", err)
	}
	log.Println("数据库连接成功并迁移完成")
}

连接完成后我们可以进行crud

创建一条用户记录:

db.Create(&user),传入结构体指针从而将想要的用户数据存入数据库

查询数据库中所有用户 ,并返回error

err := db.Find(&users).Error

通过id删除指定用户,传入结构体指针和id,返回error

err := db.Delete(&User{}, id)

上述是基本的简单crud,通过gorm也可以实现复杂的数据库操作:

通过 GORM 实现复杂的 CRUD 操作,可以包括以下功能:多条件查询、批量更新、关联查询、事务操作和自定义 SQL。

1. 多条件查询

查询所有年龄大于 25 岁,且姓名包含 “A” 的用户。

err := db.Where("age > ?", 25).Where("name LIKE ?", "%A%").Find(&users).Error

我们可以拼接sql语句来实现复杂查询,比如模糊查询

2. IN 查询****

查询多个指定用户 ID 的订单记录。,通过IN关键字实现范围查询

var orders []Order

err := db.Where("user_id IN ?", userIDs).Find(&orders).Error

上述sql语句会查询userIDs切片中的批量数据并返回,简化了开发

我们还可以使用事物操作,这是很重要的在大型项目开发中

GORM 提供了 db.Transaction 方法来管理事务。使用时,需要传递一个函数,该函数包含所有事务操作。 我们也可以使用 Begin 开启事务,结合 Commit 和 Rollback 实现手动管理。

GORM 支持常见的数据库隔离级别,例如 READ UNCOMMITTEDREAD COMMITTED 等。通过 GORM 提供的事务管理功能,我们可以方便地处理复杂业务逻辑,同时确保数据的完整性和一致性。在实际使用中,根据业务需求灵活选择事务的使用方式是关键。