《go web 编程》第四章 访问数据库:使用 Beego orm 库进行 ORM 开发

beego orm 是一个 Go 进行 ORM 操作的库,它采用了 Go style 方式对数据库进行操作,实现了 struct 到数据表记录的映射。beego orm 是一个十分轻量级的 Go ORM 框架,开发这个库的本意降低复杂的 ORM 学习曲线,尽可能在 ORM 的运行效率和功能之间寻求一个平衡,beego orm 是目前开源的 Go ORM 框架中实现比较完整的一个库,而且运行效率相当不错,功能也基本能满足需求。

beego orm 是支持 database/sql 标准接口的 ORM 库,所以理论上来说,只要数据库驱动支持 database/sql 接口就可以无缝的接入 beego orm。目前测试过的驱动包括下面几个:

Mysql: github/go-mysql-driver/mysql

PostgreSQL: github.com/lib/pq

SQLite: github.com/mattn/go-sqlite3

Mysql: github.com/ziutek/mymysql/godrv

暂未支持数据库:

MsSql: github.com/denisenkom/go-mssqldb

MS ADODB: github.com/mattn/go-adodb

Oracle: github.com/mattn/go-oci8

ODBC: bitbucket.org/miquella/mgodbc

安装

beego orm 支持 go get 方式安装,是完全按照 Go Style 的方式来实现的。


image.png

如何初始化

首先你需要 import 相应的数据库驱动包、database/sql 标准接口包以及 beego orm 包,如下所示:


image.png

PostgreSQL 配置:

// _ "github.com/lib/pq"

// 注册驱动
orm.RegisterDriver("postgres", orm.DR_Postgres) 

// 设置默认数据库
// PostgresQL用户:postgres ,密码:zxxx , 数据库名称:test , 数据库别名:default
orm.RegisterDataBase("default", "postgres", "user=postgres password=zxxx dbname=test host=127.0.0.1 port=5432 sslmode=disable")

MySQL 配置:

// _ "github.com/go-sql-driver/mysql"

// 注册驱动
orm.RegisterDriver("mysql", orm.DR_MySQL)

// 设置默认数据库
//mysql用户:root ,密码:zxxx , 数据库名称:test , 数据库别名:default
 orm.RegisterDataBase("default", "mysql", "root:zxxx@/test?charset=utf8")

Sqlite 配置:

// _ "github.com/mattn/go-sqlite3"

// 注册驱动
orm.RegisterDriver("sqlite", orm.DR_Sqlite)

// 设置默认数据库
// 数据库存放位置:./datas/test.db , 数据库别名:default
orm.RegisterDataBase("default", "sqlite3", "./datas/test.db")

导入必须的 package 之后,我们需要打开到数据库的链接,然后创建一个 beego orm 对象(以 MySQL 为例),如下所示
beego orm:


func main() {
    o := orm.NewOrm()
}

简单示例:


package main

import (
    "fmt"
    "github.com/astaxie/beego/orm"
    _ "github.com/go-sql-driver/mysql" // 导入数据库驱动
)

// Model Struct
type User struct {
    Id   int
    Name string `orm:"size(100)"`
}

func init() {
    // 设置默认数据库
    orm.RegisterDataBase("default", "mysql", "root:root@/my_db?charset=utf8", 30)

    // 注册定义的 model
    orm.RegisterModel(new(User))
// RegisterModel 也可以同时注册多个 model
// orm.RegisterModel(new(User), new(Profile), new(Post))

    // 创建 table
    orm.RunSyncdb("default", false, true)
}

func main() {
    o := orm.NewOrm()

    user := User{Name: "slene"}

    // 插入表
    id, err := o.Insert(&user)
    fmt.Printf("ID: %d, ERR: %v\n", id, err)

    // 更新表
    user.Name = "astaxie"
    num, err := o.Update(&user)
    fmt.Printf("NUM: %d, ERR: %v\n", num, err)

    // 读取 one
    u := User{Id: user.Id}
    err = o.Read(&u)
    fmt.Printf("ERR: %v\n", err)

    // 删除表
    num, err = o.Delete(&u)
    fmt.Printf("NUM: %d, ERR: %v\n", num, err)
}

推荐阅读更多精彩内容