GORM - CRUD

1. Create

u := User{Name: "Jason", Age: 18, Birthday: time.Now()}

db.NewRecord(u) // => true, since id is empty

db.Create(&u)

db.NewRecord(u) // => false

cb

func (u *User) BeforeCreate(scope *gorm.Scope) error {
  scope.SetColumn("ID", uuid.New())
  return nil
}

2. Read

// findAll
db.Find(&us)
//// SELECT * FROM users;

// - - - - - - - - 
db.First(&u)
//// SELECT * FROM users ORDER BY id LIMIT 1;

db.Last(&u)
//// SELECT * FROM users ORDER BY id DESC LIMIT 1;

// - - - - - - - - 
db.First(&u, 10)
//// SELECT * FROM users WHERE id = 10;

query

// find first matched
db.Where("name = ?", "jason").First(&u)
//// SELECT * FROM users WHERE name = 'jason' limit 1;

// find all matched
db.Where("name = ?", "jason").Find(&us)
//// SELECT * FROM users WHERE name = 'jason';
db.Where("name <> ?", "jason").Find(&us)

// - - - - - 
db.Where("name in (?)", []string{"jason", "jason 2"}).Find(&us)
db.Where("name LIKE ?", "%jas%").Find(&us)
db.Where("name = ? AND age >= ?", "jason", "22").Find(&us)
db.Where("updated_at > ?", lastWeek).Find(&us)
db.Where("created_at BETWEEN ? AND ?", lastWeek, today).Find(&us)

query by struct or map

// Struct
db.Where(&User{Name: "jason", Age: 20}).First(&u)
//// SELECT * FROM users WHERE name = "jason" AND age = 20 LIMIT 1;
db.Where(&User{Name: "jason", Age: 20}).Find(&us)

// Map
db.Where(map[string]interface{}{"name": "jason", "age": 20}).Find(&us)
//// SELECT * FROM users WHERE name = "jason" AND age = 20;

// id slice
db.Where([]int64{20, 21, 22}).Find(&us)
//// SELECT * FROM users WHERE id IN (20, 21, 22);

query not

db.Not([]int64{}).First(&u)
//// SELECT * FROM users;

// - - - - - - -
db.Not("name = ?", "jason").First(&u)
//// SELECT * FROM users WHERE NOT(name = "jason");

// Struct
db.Not(User{Name: "jason"}).First(&u)
//// SELECT * FROM users WHERE name <> "jason";

TBD 1.4.2

https://jasperxu.github.io/gorm-zh/crud.html#q

Last updated

Was this helpful?