golang,go,博客,开源,编程

gorm Scan和Find的区别

Published on with 0 views and 0 comments

gormScanFind 都是用于从数据库中查询数据,但它们有一些不同的应用场景和行为。

1. Find

  • Find 通常用于查询表中的一组数据,返回的是一个切片(slice)或者单个记录(结构体)。
  • 默认情况下,Find 会将查询结果映射到结构体的字段上,字段名必须与数据库列名一致(或者通过 gorm 的标签来匹配)。
  • 如果你查询的是多个记录,Find 会返回多个结果。

例如:

var users []User
db.Find(&users)

如果查询结果是多个用户,users 切片会被填充。

2. Scan

  • Scan 用于将查询的结果映射到已经存在的变量或者结构体上,通常用于更灵活的查询结果处理。
  • Scan 更常用于查询结果不是直接映射到模型结构体时,比如查询的字段不完全匹配模型结构,或者需要将结果扫描到自定义的结构体中。
  • Scan 不像 Find 那样做自动映射,它直接将查询的结果扫描到目标对象。

例如:

var count int
db.Model(&User{}).Where("age > ?", 18).Count(&count)
db.Scan(&count) // 使用 Scan 进行扫描

主要区别

  • 数据映射方式Find 是用于将结果直接映射到结构体或切片,Scan 则是更通用的方式,可以将结果扫描到任何变量或结构体。
  • 用途Find 适合普通的查询,Scan 则适合于更复杂的或特定场景下的查询(例如不完全匹配结构体、查询复杂的自定义数据等)。
  • 性能Scan 的性能可能更高一些,因为它不做复杂的映射,只是将查询结果直接存储到指定的变量中。

总的来说,Find 更常用于简单的查询,而 Scan 更适合用于定制化的查询或处理复杂的返回结果。


标题:gorm Scan和Find的区别
作者:mooncakeee
地址:http://blog.dd95828.com/articles/2025/02/17/1739760634724.html
联系:scotttu@163.com