一 点睛
beego orm是一个Go 进行 ORM 操作的库,它采用了 Go style 方式对数据库进行操作,实现了 struct 到数据表记录的映射。beego orm 是一个十分轻量级的 Go ORM 框架,这个库的本意是降低复杂的 ORM 学习曲线,尽可能在 ORM 的运行效率和功能之间寻求一个平衡,beego orm 是目前开源的 Go ORM 框架中实现比较完整的一个库,而且运行效率相当不错,功能也基本能满足需求。
beego orm 是支持 database/sq l标准接口的 ORM 库,所以理论上来说,只要数据库驱动支持 database/sq l接口,就可以无缝的接入 beego orm。
二 支持的驱动包
-
Mysql: github/go-mysql-driver/mysql
-
PostgreSQL: github.com/lib/pq
-
SQLite: github.com/mattn/go-sqlite3
三 暂未支持的驱动包
-
MS ADODB: github.com/mattn/go-adodb
-
Oracle: github.com/mattn/go-oci8
四 安装
beego orm 支持 go get 方式安装,是完全按照 Go Style 的方式来实现的。
go get github.com/astaxie/beego
五 mysql 数据库初始化
需要 import 相应的数据库驱动包、database/sql 标准接口包以及 beego orm 包。
import (
"database/sql"
"github.com/astaxie/beego/orm"
_ "github.com/go-sql-driver/mysql"
)
func init() {
// 注册驱动
orm.RegisterDriver("mysql", orm.DRMySQL)
// 设置默认数据库
orm.RegisterDataBase("default", "mysql", "root:root@/my_db?charset=utf8", 30)
// 注册定义的 model
orm.RegisterModel(new(User))
// 创建table
orm.RunSyncdb("default", false, true)
}
六 实战
1 代码
package main
import (
"fmt"
"github.com/astaxie/beego/orm"
_ "github.com/mysql-go"
)
// 模型
type User struct {
Id int
Name string `orm:"size(100)"`
}
func init() {
// 设置默认数据库
orm.RegisterDataBase("default", "mysql", "root:Mima123456@/test?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)
// 读取表
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)
}
2 测试
create table `user`
-- --------------------------------------------------
-- Table Structure for `main.User`
-- --------------------------------------------------
CREATE TABLE IF NOT EXISTS `user` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`name` varchar(100) NOT NULL DEFAULT ''
) ENGINE=InnoDB;
ID: 1, ERR: <nil>
NUM: 1, ERR: <nil>
ERR: <nil>
NUM: 1, ERR: <nil>
并且在数据库中,自动生成数据表
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
七 参考
https://gitee.com/cakin24/build-web-application-with-golang/blob/master/zh/05.5.md