乐闻世界logo
搜索文章和话题

What are the commonly used query methods in GORM?

3月6日 21:37

GORM provides various query methods. Here are the commonly used query methods explained in detail:

Basic Query Methods

1. First() - Query the first record

go
var user User db.First(&user) // SELECT * FROM users ORDER BY id LIMIT 1 db.First(&user, 10) // SELECT * FROM users WHERE id = 10

2. Last() - Query the last record

go
var user User db.Last(&user) // SELECT * FROM users ORDER BY id DESC LIMIT 1

3. Find() - Query multiple records

go
var users []User db.Find(&users) // SELECT * FROM users db.Find(&users, []int{1, 2, 3}) // SELECT * FROM users WHERE id IN (1, 2, 3)

4. Take() - Get one record without specifying order

go
var user User db.Take(&user) // SELECT * FROM users LIMIT 1

Conditional Queries

Where() - Add query conditions

go
db.Where("name = ?", "John").First(&user) db.Where("name = ? AND age >= ?", "John", 18).Find(&users) db.Where(map[string]interface{}{"name": "John", "age": 30}).First(&user) db.Where(&User{Name: "John"}).First(&user)

Advanced Queries

Chainable queries

go
db.Where("age > ?", 18). Order("age DESC"). Limit(10). Offset(5). Find(&users)

Or conditions

go
db.Where("name = ?", "John").Or("name = ?", "Jane").Find(&users)

Not conditions

go
db.Not("name = ?", "John").Find(&users)

In query

go
db.Where("id IN ?", []int{1, 2, 3}).Find(&users)

Like query

go
db.Where("name LIKE ?", "%John%").Find(&users)

Between query

go
db.Where("age BETWEEN ? AND ?", 18, 30).Find(&users)

Sorting and Pagination

Order() - Sorting

go
db.Order("age DESC").Find(&users) db.Order("age DESC, name ASC").Find(&users)

Limit() - Limit records

go
db.Limit(10).Find(&users)

Offset() - Offset

go
db.Offset(10).Limit(10).Find(&users) // Pagination query

Select Specific Fields

Select() - Select fields

go
db.Select("name", "email").Find(&users) db.Select("name, email").Find(&users)

Aggregate Queries

Count() - Count

go
var count int64 db.Model(&User{}).Where("age > ?", 18).Count(&count)

Pluck() - Extract single column

go
var names []string db.Model(&User{}).Pluck("name", &names)

Raw SQL

Raw() - Execute raw SQL

go
db.Raw("SELECT * FROM users WHERE age > ?", 18).Scan(&users)

Exec() - Execute raw SQL (no data returned)

go
db.Exec("UPDATE users SET age = age + 1 WHERE id = ?", 1)

Notes

  1. First() vs Take(): First() sorts by primary key, Take() does not sort
  2. Query conditions: Use parameterized queries (?) to prevent SQL injection
  3. Performance optimization: Use indexes reasonably, limit query fields, avoid N+1 queries
  4. Error handling: Check db.Error to handle query errors
  5. Preloading: Use Preload() to avoid performance issues with association queries
标签:Gorm