作者:ChainDesk韩茹,ChainDesk区块链行业分析师, ChainDesk区块链工程师
ChainDesk官网:http://www.chaindesk.cn/?20181205csdnmeiti
本篇文章阅读时间:3.6分钟
模型(Models)
一、Model介绍
beego ORM 是一个强大的 Go 语言 ORM 框架,orm模块主要是处理MVC中的M(models)。她的灵感主要来自Django ORM 和 SQLAlchemy。
对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。
已支持数据库驱动:
- MySQL : github. com/go-sq-driver/mysql
- PostgreSQL : github. com/lib/pq
- Sqlite3 : github. com/mattn/go-sqite3
模型(Models)
ORM特性:
- 支持Go的所有类型存储
- 轻松上手,采用简单的CRUD风格
- 自动Join关联表
- 跨数据库兼容查询
- 允许直接使用SQL查询/映射
- 严格完整的测试保证ORM的稳定与健壮
1.1 模型定义
复杂的模型定义不是必须的,此功能用作数据库数据转换和自动建表
默认的表名规则,使用驼峰转蛇形:
AuthUser -> auth_user
Auth_User -> auth__user
DB_AuthUser -> d_b__auth_user
除了开头的大写字母以外,遇到大写会增加 _
,原名称中的下划线保留。
1.2 自定义表名
type User struct {
Id int
Name string
}
func (u *User) TableName() string {
return "auth_user"
}
如果前缀设置为prefix_
那么表名为:prefix_auth_user
1.3 忽略字段
设置 -
即可忽略 struct 中的字段
type User struct {
...
Username string `orm:"column(username)"`
AnyField string `orm:"-"`
...
}
结构体和表映射时,可以自动映射,也可以通过orm:column(列名)
来指定。
二、安装
安装ORM:
打开终端,输入以下命令:
go get github.com/astaxie/beego/orm
安装成功后,可以查看gopath的src目录:
三、ORM的使用
ORM的使用非常简单,只有三步:
step1:注册(初始化信息)
step2:创建Model(构建struct实体)
step3:数据库操作
我们先通过终端进入gopath的src目录下,使用如下命令,创建一个beego项目:
bee new beegoORM
3.1 注册
3.1.1 注册数据库信息
3.1.1.1 RegisterDriver
三种默认数据库类型
// For version 1.6
orm.DRMySQL
orm.DRSqlite
orm.DRPostgres
// < 1.6
orm.DR_MySQL
orm.DR_Sqlite
orm.DR_Postgres
注册驱动的语法:
// 参数1 driverName
// 参数2 数据库类型
// 这个用来设置 driverName 对应的数据库类型
// mysql / sqlite3 / postgres 这三种是默认已经注册过的,所以可以无需设置
orm.RegisterDriver("mysql", orm.DRMySQL)
3.1.1.2 RegisterDataBase
ORM 必须注册一个别名为 default
的数据库,作为默认使用。
ORM 使用 golang 自己的连接池。
// 参数1 数据库的别名,用来在 ORM 中切换数据库使用
// 参数2 driverName
// 参数3 对应的链接字符串
orm.RegisterDataBase("default", "mysql", "root:root@/orm_test?charset=utf8")
// 参数4(可选) 设置最大空闲连接
// 参数5(可选) 设置最大数据库连接 (go >= 1.2)
maxIdle := 30
maxConn := 30
orm.RegisterDataBase("default", "mysql", "root:root@/orm_test?charset=utf8", maxIdle, maxConn)
3.1.1.3 SetMaxIdleConns
根据数据库的别名,设置数据库的最大空闲连接。
orm.SetMaxIdleConns("default", 30)
3.1.1.4 SetMaxOpenConns
根据数据库的别名,设置数据库的最大数据库连接 (go >= 1.2)
orm.SetMaxOpenConns("default", 30)
3.1.1.5 时区设置
ORM 默认使用 time.Local 本地时区
- 作用于 ORM 自动创建的时间
- 从数据库中取回的时间转换成 ORM 本地时间
如果需要的话,你也可以进行更改
// 设置为 UTC 时间
orm.DefaultTimeLoc = time.UTC
ORM 在进行 RegisterDataBase 的同时,会获取数据库使用的时区,然后在 time.Time 类型存取时做相应转换,以匹配时间系统,从而保证时间不会出错。
注意:
- 鉴于 Sqlite3 的设计,存取默认都为 UTC 时间
- 使用 go-sql-driver 驱动时,请注意参数设置
从某一