ORM

Beego ORM 是一个使用便捷,有助于快速开发的 ORM 框架,其使用流程相对比较简洁。我们一起来看一下其使用的几个环节。

orm初始化流程:

1.先注册一个别名为"default"的DataBase,调用函数

orm.RegisterDataBase(aliasName, driverName, dataSource string, params ...int) 

函数名参数含义如下:

aliasName: 数据库别名。同一进程中可以注册多个数据库,这个参数用来在 ORM 中切换数据库使用,多个别名中必须有一个缺省的"default"
driverName:驱动名,可以取"mysql","sqlite"等
dataSource:数据库源配置链接字符串,和Go的database/sql包打开数据库连接时传入的参数一样。如"username:password@tcp(127.0.0.1:3306)/db_name?charset=utf8"
params:这是个变长参数,params[0]:设置最大空闲连接 ,params[1]:设置最大数据库连接

2.注册model,调用函数

orm.(models ...interface{})

参数含义如下:

models:变长参数,这里可传入一个或多个model实例,如:
orm.RegisterModel(new(Book), new(User))

3.根据Model定义,自动创建数据表

orm.RunSyncdb(name string, force bool, verbose bool)

参数含义如下:

name:数据库别名
force:true:发生错误时,继续执行下一条sql
verbose:true:打印详细信息 

以上三步,在实际应用中可能如下:

// 注册 default database,并设置数据库连接池最大空闲连接数为30
orm.RegisterDataBase("default", "mysql", "username:password@tcp(127.0.0.1:3306)/db_name?charset=utf8", 30)

//注册 model
orm.RegisterModel(new(User))

// 自动建表
orm.RunSyncdb("default", false, true)

数据读写

在读写数据方面,Beego ORM采用简单的 CRUD 风格,操作简便。我们看下面的例子:

o := orm.NewOrm()
o.Using("default") // 默认使用 default,你可以指定为其他数据库

user := User{Id: 1}
user.Nickname = "admin"
o.Insert(&user)

user.Phone="18001010101"
o.Update(&user)
o.Read(&user,"phone")  //查询phone="18001010101"的用户信息

o.Delete(&User{Id: 1})  //删除Id为1的用户

其中,Read函数原型如下:

Read(md interface{}, cols ...string) error
//参数说明
cols:以cols所指的字段构造sql查询

而Update函数原型的cols参数含义略有不同

Update(md interface{}, cols ...string) (int64, error)
//参数
cols:制定需要更新的字段
md:model对象,需给主键赋值。

Delete函数原型和Update比较类似,参数意义也相同。

Delete(md interface{}, cols ...string) (int64, error)

其他

1.Beego ORM支持原生sql查询,比如:

ids := []int{1, 2, 3}
p.Raw("SELECT name FROM user WHERE id IN (?, ?, ?)", ids)

2.在使用多数据库的场景时,只要在执行查询前,使用Using函数切换即可:

o:=orm.NewOrm()
o.Using("default")  //切换到别名是default的database
...

Using函数原型如下:

Using(name string) error
name:数据库别名

我们可以看到,Beego ORM的基本使用还是相当便捷的,可以很好帮助我们提升开发效率。但也并非十全十美,比如:原生并不支持分表。