Gorm--Scan

在 Gorm 中,Scan 是一个用于将查询结果映射到自定义结构体或变量的函数。与 Find 或 First 不同,Scan 允许你将查询结果存储到与数据库模型不完全匹配的结构体中。它特别适合用于自定义查询结果或联合查询的场景。

type Result struct {
    Name  string
    Email string
}

var result Result
db.Table("users").Select("name, email").Where("id = ?", 1).Scan(&result)

在上面这个例子中,Scan 方法将查询结果映射到 Result 结构体中。

type Stats struct {
    MaxAge int
}

var stats Stats
db.Table("users").Select("max(age) as max_age").Scan(&stats)

问题:查询结果返回的字段是max_age,为什么能匹配到结构体的MaxAge ?
在 Gorm 中,Scan 会将查询结果的字段名自动映射到结构体的字段名,遵循以下规则:

  • 字段名大小写无关:Gorm 会忽略字段名的大小写进行匹配。即使查询结果的字段名是 max_age,它仍然会匹配到结构体中的 MaxAge 字段。

  • 下划线与驼峰命名法的转换:Gorm 会尝试将查询结果中的下划线格式(如 max_age)与结构体的驼峰命名格式(如 MaxAge)进行对应。这种转换是自动完成的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值