gorm入门——删除对象

在 GORM 中,你可以根据任何字段删除记录。要根据其他字段删除记录,你可以使用 Delete 方法,并传入一个包含要删除条件的结构体或使用 Where 方法指定条件。

示例代码:

假设你有一个 User 结构体,并想根据 Name 字段删除记录。

方法1:使用 Delete 方法并传入条件
package main

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

type User struct {
    ID   uint
    Name 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 {
        panic(err)
    }

    // 根据Name字段删除记录
    nameToDelete := "John Doe"

    // 使用Delete方法传入条件
    if err := db.Delete(&User{}, "name = ?", nameToDelete).Error; err != nil {
        fmt.Println("Error:", err)
    } else {
        fmt.Println("Record deleted successfully")
    }
}

方法2:使用 Where 方法指定条件

package main

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

type User struct {
    ID   uint
    Name 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 {
        panic(err)
    }

    // 根据Name字段删除记录
    nameToDelete := "John Doe"

    // 使用Where和Delete方法组合
    if err := db.Where("name = ?", nameToDelete).Delete(&User{}).Error; err != nil {
        fmt.Println("Error:", err)
    } else {
        fmt.Println("Record deleted successfully")
    }
}

解释:

  • 方法1: 使用 Delete 方法时,可以传入查询条件(如 "name = ?") 和参数(如 nameToDelete)。GORM 会生成对应的 DELETE SQL 语句。

db.Delete(&User{}, "name = ?", nameToDelete)

方法2: 使用 Where 方法可以更加灵活地指定删除条件。Where 方法设置查询条件后,再调用 Delete 方法来删除符合条件的记录。

db.Where("name = ?", nameToDelete).Delete(&User{})

注意:

  • 在这两种方法中,删除操作会删除所有符合条件的记录。
  • 如果你想删除多个条件组合下的记录,可以通过 ANDOR 条件组合,或者在 Where 方法中传递多个参数来实现。

例如,删除 Name"John Doe" 并且 Age30 的记录:

db.Where("name = ? AND age = ?", "John Doe", 30).Delete(&User{})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值