模型(Models)- beego ORM

beego ORM 是一个强大的 Go 语言 ORM 框架。她的灵感主要来自 Django ORM 和 SQLAlchemy。

目前该框架仍处于开发阶段,可能发生任何导致不兼容的改动。

已支持数据库驱动:

以上数据库驱动均通过基本测试,但我们仍需要您的反馈。

ORM 特性:

  • 支持 Go 的所有类型存储
  • 轻松上手,采用简单的 CRUD 风格
  • 自动 Join 关联表
  • 跨数据库兼容查询
  • 允许直接使用 SQL 查询/映射
  • 严格完整的测试保证 ORM 的稳定与健壮

更多特性请在文档中自行品读。

安装 ORM:

  1. go get github.com/beego/beego/v2/client/orm

快速入门

简单示例

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/beego/beego/v2/client/orm"
  5. _ "github.com/go-sql-driver/mysql" // import your used driver
  6. )
  7. // Model Struct
  8. type User struct {
  9. Id int
  10. Name string `orm:"size(100)"`
  11. }
  12. func init() {
  13. // set default database
  14. orm.RegisterDataBase("default", "mysql", "username:password@tcp(127.0.0.1:3306)/db_name?charset=utf8&loc=Local", 30)
  15. // register model
  16. orm.RegisterModel(new(User))
  17. // create table
  18. orm.RunSyncdb("default", false, true)
  19. }
  20. func main() {
  21. o := orm.NewOrm()
  22. user := User{Name: "slene"}
  23. // insert
  24. id, err := o.Insert(&user)
  25. fmt.Printf("ID: %d, ERR: %v\n", id, err)
  26. // update
  27. user.Name = "astaxie"
  28. num, err := o.Update(&user)
  29. fmt.Printf("NUM: %d, ERR: %v\n", num, err)
  30. // read one
  31. u := User{Id: user.Id}
  32. err = o.Read(&u)
  33. fmt.Printf("ERR: %v\n", err)
  34. // delete
  35. num, err = o.Delete(&u)
  36. fmt.Printf("NUM: %d, ERR: %v\n", num, err)
  37. }

关联查询

  1. type Post struct {
  2. Id int `orm:"auto"`
  3. Title string `orm:"size(100)"`
  4. User *User `orm:"rel(fk)"`
  5. }
  6. var posts []*Post
  7. qs := o.QueryTable("post")
  8. num, err := qs.Filter("User__Name", "slene").All(&posts)

SQL 查询

当您无法使用 ORM 来达到您的需求时,也可以直接使用 SQL 来完成查询/映射操作。

  1. var maps []orm.Params
  2. num, err := o.Raw("SELECT * FROM user").Values(&maps)
  3. for _,term := range maps{
  4. fmt.Println(term["id"],":",term["name"])
  5. }

事务处理

  1. o.Begin()
  2. ...
  3. user := User{Name: "slene"}
  4. id, err := o.Insert(&user)
  5. if err == nil {
  6. o.Commit()
  7. } else {
  8. o.Rollback()
  9. }

调试查询日志

在开发环境下,您可以使用以下指令来开启查询调试模式:

  1. func main() {
  2. orm.Debug = true
  3. ...

开启后将会输出所有查询语句,包括执行、准备、事务等。

例如:

  1. [ORM] - 2013-08-09 13:18:16 - [Queries/default] - [ db.Exec / 0.4ms] - [INSERT INTO `user` (`name`) VALUES (?)] - `slene`
  2. ...

注意:我们不建议您在部署产品后这样做。