1. 概述

2. 模型(Models)- beego ORM

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

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

已支持数据库驱动:

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

ORM 特性:

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

安装 ORM:

  • 2016-01-18: 规范了数据库驱动的命名
  • 2014-03-10: 从注册的数据库中返回 *sql.DB. ResetModelCache 重置已注册的模型struct
  • 2014-02-10: 随着 beego1.1.0 的发布提交的改进

    • 关于

    • 新增的 api: Ormer.InsertMulti Ormer. RawSeter.RowsToMap RawSeter. orm.NewOrmWithDB

    • 改进的 api: RawSeter. 支持设置 columns RawSeter.ValuesList 支持设置 columns RawSeter. 支持设置 column RawSeter.QueryRow/QueryRows 从对应每个strcut field位置的赋值,改为对应名称取值(不需要对应好字段数量与位置)

  • 2013-10-09:

  • 2013-09-22: RegisterDataBase maxIdle / maxConn 设置为可选参数, MySQL
  • 2013-09-16: 支持设置 空闲链接数 和 最大链接数 SetMaxIdleConns /
  • 2013-09-12: Read 支持设定条件字段 / All / 支持设定返回字段
  • 2013-09-09: Raw SQL QueryRow/QueryRows 功能完成
  • 2013-08-19: 功能完成
  • 2013-08-13: 更新数据库类型测试
  • 2013-08-13: 增加 Go 类型支持,包括 int8、uint8、byte、rune 等
  • 2013-08-13: 增强 date/datetime 的时区支持

2.2. 快速入门

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

当您无法使用 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. func main() {

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

例如: