gorm model方法的使用

ruleTarget := NewRuleTarget()
ruleTarget.RuleID = 0
ruleTarget.UserID = 1
ruleTarget.AccountID = 2
ruleTarget.CampaignID = 3
ruleTarget.AdGroupID = 4
ruleTarget.ID = 29
db.Model(ruleTarget).Update(map[string]interface{}{
   "RuleID": 20,
})

Model 方法中传入的对象指针,只有该指针中主键(ID)字段不为0时候,此时才会按照id进行处理。否则,如果id为0,则直接全部表进行后续的sql操作。类似: UPDATE "rule_targets" SET "rule_id" = 20, "updated_at" = '2021-05-11 22:14:07'  WHERE "rule_targets"."deleted_at" IS NULL

 

 

 

### GORM 常用方法使用示例 GORM 是一个流行的 Go 语言 ORM(对象关系映射)库,它允许开发者通过 Go 代码操作数据库,而无需编写复杂的 SQL 语句[^2]。以下是一些常用的 GORM 方法及其使用示例: #### 1. 创建记录 使用 `Create()` 方法可以插入一条新记录到数据库中。 ```go package main import ( "fmt" "gorm.io/driver/sqlite" "gorm.io/gorm" ) type User struct { ID uint Name string Age int } func main() { db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{}) if err != nil { panic("failed to connect database") } // 自动迁移 schema db.AutoMigrate(&User{}) // 创建记录 db.Create(&User{Name: "Alice", Age: 25}) } ``` #### 2. 查询记录 GORM 提供了多种查询方法,如 `First()`、`Last()` 和 `Find()` 等。 - **`First()`**:查找符合条件的第一条记录。 - **`Last()`**:查找符合条件的最后一条记录。 - **`Find()`**:查找所有符合条件的记录。 ```go var user User db.Where("name = ?", "Alice").First(&user) // 查询名称为 "Alice" 的用户信息 fmt.Println("User:", user) ``` #### 3. 更新记录 可以通过 `Save()` 或 `Update()` 方法更新记录。 - **`Save()`**:更新整个模型。 - **`Update()`**:仅更新指定字段。 ```go // 更新整个模型 db.Model(&user).Save(&User{Name: "Bob", Age: 30}) // 更新单个字段 db.Model(&user).Update("Age", 35) ``` #### 4. 删除记录 使用 `Delete()` 方法可以删除指定记录。 ```go db.Delete(&User{}, 1) // 删除 ID 为 1 的用户 ``` #### 5. 批量插入 当需要高效地插入大量记录时,可以将切片传递给 `Create()` 方法[^3]。 ```go users := []User{ {Name: "Charlie", Age: 28}, {Name: "David", Age: 32}, } db.Create(&users) ``` #### 6. 条件查询 条件查询可以通过 `Where()` 方法实现[^1]。 ```go var products []Product db.Where("price > ?", 100).Find(&products) // 查询价格大于 100 的产品 ``` #### 7. 关联查询 GORM 支持预加载关联数据,例如 `Preload()` 方法可以用于加载关联的模型。 ```go type Order struct { gorm.Model UserID uint User User } var orders []Order db.Preload("User").Find(&orders) // 预加载每个订单的用户信息 ``` #### 8. 事务处理 GORM 提供了事务支持,可以确保一系列操作要么全部成功,要么全部失败。 ```go tx := db.Begin() defer func() { if r := recover(); r != nil { tx.Rollback() } }() if tx.Error != nil { tx.Rollback() return } tx.Create(&User{Name: "Eve", Age: 22}) tx.Create(&User{Name: "Frank", Age: 29}) tx.Commit() ``` ### 注意事项 - 在执行数据库操作前,建议使用 `AutoMigrate()` 方法自动创建表结构[^4]。 - 如果需要自定义表名,可以通过定义 `TableName()` 方法实现[^4]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值