事务处理

当使用事务处理时,需要创建 Session 对象。在进行事务处理时,可以混用 ORM 方法和 RAW 方法,如下代码所示:

  1. func MyTransactionOps() error {
  2. session := engine.NewSession()
  3. defer session.Close()
  4. // add Begin() before any action
  5. if err := session.Begin(); err != nil {
  6. return err
  7. }
  8. user1 := Userinfo{Username: "xiaoxiao", Departname: "dev", Alias: "lunny", Created: time.Now()}
  9. if _, err := session.Insert(&user1); err != nil {
  10. return err
  11. }
  12. user2 := Userinfo{Username: "yyy"}
  13. if _, err = session.Where("id = ?", 2).Update(&user2); err != nil {
  14. return err
  15. }
  16. if _, err = session.Exec("delete from userinfo where username = ?", user2.Username); err != nil {
  17. return err
  18. }
  19. // add Commit() after all actions
  20. return session.Commit()
  21. }
  • 注意如果您使用的是 mysql,数据库引擎为 innodb 事务才有效,myisam 引擎是不支持事务的。