GORM的CURD基本使用

75 阅读2分钟

Create基本使用

user := User{Name: "Jinzhu", Age: 18, Birthday: time.Now()}//创建用户
resoult :=db.Create(&user)//向表中添加字段,结果返回resoul

result.Error

  • 含义:这是一个错误对象,表示在执行数据库操作过程中是否发生了错误。
  • 用途:通过检查 result.Error,你可以判断数据库操作是否成功。如果 result.Error 为 nil,则表示操作成功;否则,它会包含具体的错误信息。
  • 示例
result := db.Create(&user) 
if result.Error != nil {
fmt.Println("Error:", result.Error) 
} else { 
fmt.Println("User created successfully") 
}

result.RowsAffected

含义:这是一个整数值,表示数据库操作影响的行数。 用途:通过检查 result.RowsAffected,你可以知道操作影响了多少行数据。对于插入操作,通常这个值是 1,因为一次 Create 调用通常只插入一条记录。对于更新或删除操作,这个值可能会更大,因为它可能反映了多条记录的变化。 示例:

result := db.Create(&user) 
fmt.Println("Rows affected:",result.RowsAffected)

Create批量增加

users := []*User{
{Name: "Jinzhu", Age: 18, Birthday: time.Now()},
{Name: "Jackson", Age: 19, Birthday: time.Now()}, 
}
result := db.Create(users) 
result.Error 
result.RowsAffected 

查询方法的使用

GORM 提供了 FirstTakeLast 方法来从数据库中检索单个对象。这些方法在查询数据库时会添加 LIMIT 1 条件,并且如果未找到记录,会返回 ErrRecordNotFound 错误。

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

// 获取一条记录,没有指定顺序 
db.Take(&user)
// SELECT * FROM users LIMIT 1;

// 获取按主键降序排序的最后一条记录 
db.Last(&user)
// SELECT * FROM users ORDER BY id DESC LIMIT 1;

更新方法的使用

db.First(&user) 
user.Name = "jinzhu 2"
user.Age = 100 
db.Save(&user)
// UPDATE users SET name='jinzhu 2', age=100, birthday='2016-01-01', updated_at = '2013-11-17 21:34:10' WHERE id=111; 

Save 是一个组合函数。如果保存的值不包含主键,它将执行 Create,否则它将执行 Update(更新所有字段)。

db.Save(&User{Name: "jinzhu", Age: 100}) 
// INSERT INTO `users` (`name`,`age`,`birthday`,`update_at`) VALUES ("jinzhu",100,"0000-00-00 00:00:00","0000-00-00 00:00:00")  
db.Save(&User{ID: 1, Name: "jinzhu", Age: 100})
// UPDATE `users` SET `name`="jinzhu",`age`=100,`birthday`="0000-00-00 00:00:00",`update_at`="0000-00-00 00:00:00" WHERE `id` = 1 

删除方法的使用

// Email's ID is `10`
db.Delete(&email)
// DELETE from emails where id = 10; 

// Delete with additional conditions 
db.Where("name = ?", "jinzhu").Delete(&email) 
// DELETE from emails where id = 10 AND name = "jinzhu";

根据主键ID删除记录

db.Delete(&User{}, 10)
// DELETE FROM users WHERE id = 10;  
db.Delete(&User{}, "10") 
// DELETE FROM users WHERE id = 10;  
db.Delete(&users, []int{1,2,3}) 
// DELETE FROM users WHERE id IN (1,2,3);

如有错误,欢迎大家指出