GORM-使用GORM进行增删改查

1. 数据库模型定义

在 GORM 中,需要先定义一个结构体来表示数据库表。

示例:定义 User 模型

1
2
3
4
5
6
7
8
9
10
package main

type User struct {
ID uint `gorm:"primaryKey"`
Name string `gorm:"size:100"`
Email string `gorm:"unique"`
Age int
CreatedAt time.Time
UpdatedAt time.Time
}
  • gorm:"primaryKey":标记主键。
  • gorm:"size:100":限制字符串长度为 100。
  • gorm:"unique":设置字段唯一性。

2. 创建记录(Create)

使用 Create 方法将数据插入到数据库。

示例:插入一条记录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package main

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

type User struct {
ID uint `gorm:"primaryKey"`
Name string
Email string
Age int
}

func main() {
dsn := "user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
log.Fatalf("Failed to connect to database: %v", err)
}

// 自动迁移
db.AutoMigrate(&User{})

// 创建记录
user := User{Name: "Alice", Email: "alice@example.com", Age: 25}
result := db.Create(&user)

log.Printf("Inserted ID: %d, Rows affected: %d", user.ID, result.RowsAffected)
}

3. 查询记录(Read)

查询单条记录

使用 First 方法根据主键查询第一条记录:

1
2
user := User{}
db.First(&user, 1) // 查询主键为 1 的记录

查询多条记录

使用 Find 方法获取所有记录:

1
2
users := []User{}
db.Find(&users) // 查询所有记录

添加条件查询

使用 Where 方法添加条件:

1
2
user := User{}
db.Where("email = ?", "alice@example.com").First(&user)

4. 更新记录(Update)

使用 SaveUpdate 方法更新数据。

更新单个字段

1
db.Model(&user).Update("name", "Updated Alice")

更新多个字段

1
db.Model(&user).Updates(User{Name: "Updated Alice", Age: 30})

使用条件更新

1
db.Model(&User{}).Where("age > ?", 20).Update("age", 25)

5. 删除记录(Delete)

使用 Delete 方法删除记录。

删除指定记录

1
db.Delete(&user)

按条件删除

1
db.Where("age < ?", 18).Delete(&User{})
  • 注意:GORM 的删除操作默认是软删除,会设置 DeletedAt 字段而不直接移除数据。

6. 总结

通过 GORM 的 CRUD 操作,开发者可以快速高效地管理数据库:

  • 使用 Create 插入新数据。
  • 使用 FirstFind 查询单条或多条记录。
  • 使用 UpdateUpdates 修改数据。
  • 使用 Delete 删除记录,并支持软删除功能。