beego ORM是一个强大的Go语言ORM框架。她的灵感主要来自Django ORM和SQLAlchemy。mysql
已经支持的数据库驱动:git
ORM的特性:github
- 支持 Go 的全部类型存储
- 轻松上手,采用简单的 CRUD 风格
- 自动 Join 关联表
- 跨数据库兼容查询
- 容许直接使用 SQL 查询/映射
- 严格完整的测试保证 ORM 的稳定与健壮
安装ORM:sql
go get github.com/astaxie/beego/orm
快速入门
简单示例:
package main import ( "fmt" "github.com/astaxie/beego/orm" _ "github.com/go-sql-driver/mysql" // import your used driver ) // Model Struct type User struct { Id int Name string `orm:"size(100)"` } func init() { // set default database orm.RegisterDataBase("default", "mysql", "username:password@tcp(127.0.0.1:3306)/db_name?charset=utf8", 30) // register model orm.RegisterModel(new(User)) // create table orm.RunSyncdb("default", false, true) } func main() { o := orm.NewOrm() user := User{Name: "slene"} // insert id, err := o.Insert(&user) fmt.Printf("ID: %d, ERR: %v\n", id, err) // update user.Name = "astaxie" num, err := o.Update(&user) fmt.Printf("NUM: %d, ERR: %v\n", num, err) // read one u := User{Id: user.Id} err = o.Read(&u) fmt.Printf("ERR: %v\n", err) // delete num, err = o.Delete(&u) fmt.Printf("NUM: %d, ERR: %v\n", num, err) }
关联查询
type Post struct { Id int `orm:"auto"` Title string `orm:"size(100)"` User *User `orm:"rel(fk)"` } var posts []*Post qs := o.QueryTable("post") num, err := qs.Filter("User__Name", "slene").All(&posts)
SQL查询
当你没法使用ORM来达到您的需求的时候,也能够直接使用SQL来完成查询/映射操做。数据库
var maps []orm.Params num, err := o.Raw("SELECT * FROM user").Values(&maps) for _,term := range maps{ fmt.Println(term["id"],":",term["name"]) }
事务处理框架
o.Begin() ... user := User{Name: "slene"} id, err := o.Insert(&user) if err == nil { o.Commit() } else { o.Rollback() }
调试查询日志
在开发环境下,您可使用如下指令来开启调试模式:tcp
orm.Debug = true
开启后将会输出全部的查询语句,包括执行、准备、事务等。例如post
[ORM] - 2013-08-09 13:18:16 - [Queries/default] - [ db.Exec / 0.4ms] - [INSERT INTO `user` (`name`) VALUES (?)] - `slene`