好的,您可以使用GORM来执行这条SQL语句。假设您的结构体定义如下:

1
2
3
type WealthOrder struct {
BondBusinessRequestID uint `gorm:"column:bondBusinessRequestId"`
}

然后,您可以用GORM来查询该字段,代码如下:

1
2
var bondBusinessRequestIDs []uint
db.Table("t_wealth_order").Select("bondBusinessRequestId").Scan(&bondBusinessRequestIDs)

这段代码会查询 t_wealth_order 表中的 bondBusinessRequestId 字段,并将结果存储在 bondBusinessRequestIDs 切片中。

如果想要在这个字段为空的时候写入字段,字段有值得时候更新这个字段得gorm语句怎么写?

要在字段为空时插入字段值,字段有值时更新字段值,可以使用 GORM 的 FirstOrCreateSave 方法。假设我们有一个结构体 WealthOrder,包含 BondBusinessRequestID 字段:

1
2
3
4
type WealthOrder struct {
ID uint `gorm:"primaryKey"`
BondBusinessRequestID uint `gorm:"column:bondBusinessRequestId"`
}

接下来,我们可以编写一个函数来执行这个操作:

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
func UpsertBondBusinessRequestID(db *gorm.DB, id uint, newBondBusinessRequestID uint) error {
var order WealthOrder

// 尝试找到记录
result := db.First(&order, id)

if result.Error != nil && result.Error != gorm.ErrRecordNotFound {
return result.Error
}

if result.RowsAffected == 0 {
// 如果记录不存在,创建新记录
order = WealthOrder{
ID: id,
BondBusinessRequestID: newBondBusinessRequestID,
}
return db.Create(&order).Error
}

// 如果记录存在且字段为空,更新字段
if order.BondBusinessRequestID == 0 {
order.BondBusinessRequestID = newBondBusinessRequestID
return db.Save(&order).Error
}

return nil
}

这个函数 UpsertBondBusinessRequestID 接受一个 GORM 的 DB 实例、一个 ID 和一个新的 BondBusinessRequestID,它会根据记录是否存在和字段是否为空来插入或更新字段值。

使用示例:

1
2
3
4
5
6
7
8
9
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
log.Fatal(err)
}

err = UpsertBondBusinessRequestID(db, 1, 12345)
if err != nil {
log.Fatal(err)
}

这段代码尝试在 t_wealth_order 表中插入或更新记录,根据 ID 和 BondBusinessRequestID 的值进行相应操作。

能不能直接使用更新来更新就可以了,另外BondBusinessRequestID 应该是string类型,默认应该是null

好的,如果直接使用更新来完成这个操作,并且 BondBusinessRequestIDstring 类型,默认值为 null,您可以这样编写 GORM 语句:

首先,定义您的结构体:

1
2
3
4
type WealthOrder struct {
ID uint `gorm:"primaryKey"`
BondBusinessRequestID string `gorm:"column:bondBusinessRequestId;default:null"`
}

接下来,编写一个函数来执行更新操作:

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
func UpdateOrInsertBondBusinessRequestID(db *gorm.DB, id uint, newBondBusinessRequestID string) error {
var order WealthOrder

// 查找记录
result := db.First(&order, id)

if result.Error != nil && result.Error != gorm.ErrRecordNotFound {
return result.Error
}

if result.RowsAffected == 0 {
// 如果记录不存在,创建新记录
order = WealthOrder{
ID: id,
BondBusinessRequestID: newBondBusinessRequestID,
}
return db.Create(&order).Error
}

// 如果记录存在且字段为空,更新字段
if order.BondBusinessRequestID == "" {
return db.Model(&order).Update("BondBusinessRequestId", newBondBusinessRequestID).Error
}

return nil
}

这样,您可以在 t_wealth_order 表中查找记录,如果找到且 BondBusinessRequestID 字段为空,则更新该字段。如果未找到记录,则创建新记录。

使用示例:

1
2
3
4
5
6
7
8
9
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
log.Fatal(err)
}

err = UpdateOrInsertBondBusinessRequestID(db, 1, "new_request_id")
if err != nil {
log.Fatal(err)
}

这样,您可以根据需求进行插入或更新操作。

我直接使用db.Model(&order).Update(“BondBusinessRequestId”, newBondBusinessRequestID).Error这样得话,在BondBusinessRequestId为null的时候能成功更新写入吗?

直接使用 db.Model(&order).Update("BondBusinessRequestId", newBondBusinessRequestID).Error 可以在字段为 null 或者已有值的情况下更新字段。具体来说,这个语句会直接更新指定字段的值,无论它当前是 null 还是其他值。

如果您只希望在 BondBusinessRequestIdnull 时更新该字段,可以先查询并检查该字段的值,然后根据条件进行更新:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
func UpdateBondBusinessRequestIDIfNull(db *gorm.DB, id uint, newBondBusinessRequestID string) error {
var order WealthOrder

// 查找记录
result := db.First(&order, id)
if result.Error != nil {
return result.Error
}

// 如果字段为null,则更新字段
if order.BondBusinessRequestID == "" {
return db.Model(&order).Update("BondBusinessRequestId", newBondBusinessRequestID).Error
}

return nil
}

使用示例:

1
2
3
4
5
6
7
8
9
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
log.Fatal(err)
}

err = UpdateBondBusinessRequestIDIfNull(db, 1, "new_request_id")
if err != nil {
log.Fatal(err)
}

这样,只有在 BondBusinessRequestID 字段为 null 的情况下才会进行更新操作。

使用gorm从数据库里面查出来一个字符串类型的值,怎么判断这个值在数据库里面是不是null,如果是null的话查出来的字符串的这个值是空字符串嘛?

在 GORM 中,从数据库中查询出的字符串类型的值如果为 NULL,在 Go 中会被表示为空字符串 ("")。您可以通过检查字符串是否为空来判断该值是否在数据库中为 NULL

举个例子,假设您有如下的结构体:

1
2
3
4
type WealthOrder struct {
ID uint `gorm:"primaryKey"`
BondBusinessRequestID string `gorm:"column:bondBusinessRequestId"`
}

然后,您从数据库中查询一个记录:

1
2
3
4
5
6
var order WealthOrder
result := db.First(&order, id)
if result.Error != nil {
// 处理错误,比如记录未找到
log.Fatal(result.Error)
}

接下来,您可以通过检查 order.BondBusinessRequestID 是否为空字符串来判断该值在数据库中是否为 NULL

1
2
3
4
5
if order.BondBusinessRequestID == "" {
fmt.Println("BondBusinessRequestID is NULL in the database")
} else {
fmt.Println("BondBusinessRequestID:", order.BondBusinessRequestID)
}

如果 BondBusinessRequestID 在数据库中为 NULL,那么 order.BondBusinessRequestID 的值会是空字符串 ("")。如果该字段有值,则 order.BondBusinessRequestID 会包含该值。