🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## Insert 插入 ```go // 一条数据 var data = map[string]interface{}{"age":17, "job":"it3"} // insert into user (age, job) values (17, 'it3') db.Table(&user).Data(data).Insert() // 多条数据 var multi_data = []map[string]interface{}{ {"age":17, "job":"it3"},{"age":17, "job":"it4"} } // insert into user (age, job) values (17, 'it3') (17, 'it4') db.Table("user").Data(multi_data).Insert() ``` ## InsertGetId 插入并返回插入id, 默认返回影响行数 ```go // 一条数据 var data = map[string]interface{}{"age":17, "job":"it3"} // insert into user (age, job) values (17, 'it3') db.Table(&user).Data(data).Insert() // 多条数据 var multi_data = []map[string]interface{}{ {"age":17, "job":"it3"},{"age":17, "job":"it4"} } // insert into user (age, job) values (17, 'it3') (17, 'it4') db.Table("user").Data(multi_data).InsertGetId() ``` ## Update 修改 ```go // update user set age=17, job='ite3' where (id=1) or (age>30) db.Table("user"). Data(map[string]interface{}{"age":17, "job":"it3"}). Where("id", 1). OrWhere("age",">",30). Update() ``` ## Delete 删除 ```go // delete from user where id=5 db.Table("user").Where("id", 5).Delete() ``` 除了 `InsertGetId` 返回插入id, 其他方法均返回 影响行数, 如果影响行数为0, 则操作也是不成功的 ## 事务 ```go var data = map[string]interface{}{"names": "fizz3", "age": 3} ``` - 标准事务 ```go db := engin.NewOrm() // 开始事务 db.Begin() res,err := db.Table("user").Where("id", 1).Data(data).Update() if (res == 0 || err!=nil) { // 回滚事务 db.Rollback() } res2,err2 := db.Table("user").Data(data).Insert() if (res2 == 0 || err2!=nil) { // 回滚事务 db.Rollback() } // 提交事务 db.Commit() ``` - 一键事务: 简单用法, 用闭包实现, 自动开始,回滚和提交 事务 ```go db:= DB() err := db.Transaction( // 第一个业务 func(db IOrm) error { _,err := db.Where("uid",1).Update(&Data{"name":"gorose2"}) if err!=nil { return err } _,err = db.Insert(&Data{"name":"gorose2"}) if err!=nil { return err } return nil }, // 第二个业务 func(db IOrm) error { _,err := db.Where("uid",1).Delete() if err!=nil { return err } _,err = db.Insert(&Data{"name":"gorose2"}) if err!=nil { return err } return nil } ) ``` 内部闭包会在返回错误时自动回滚, 会在没有错误时自动提交事务 ## 特别说明 1. 传入的数据如果是struct绑定数据, 则默认忽略字段类型默认值. 如果想更新的话, 则可以使用 `ExtraCols(args ...string)`,如:`xx.ExtraCols("field","field2").Update(&Data{xxx})`