beego使用orm包操作数据库
1、Model的设置
1 //声明一个结构体,用于映射数据库表
2 type Person struct {
3 Id int
4 Name string `orm:"size(100)"`
5 Age int
6 }
2、数据库的设置
RegisterDrive
1 // 参数1 driverName
2 // 参数2 数据库类型
3 // 这个用来设置 driverName 对应的数据库类型
4 // mysql / sqlite3 / postgres 这三种是默认已经注册过的,所以可以无需设置
5 orm.RegisterDriver("mysql", orm.DRMySQL)
RegisterDataBase
ORM 必须注册一个别名为 default
的数据库,作为默认使用。
1 // 参数1 数据库的别名,用来在 ORM 中切换数据库使用
2 // 参数2 driverName
3 // 参数3 对应的链接字符串
4 orm.RegisterDataBase("default", "mysql", "root:root@/orm_test?charset=utf8")
5
6 // 参数4(可选) 设置最大空闲连接
7 // 参数5(可选) 设置最大数据库连接 (go >= 1.2)
8 maxIdle := 30
9 maxConn := 30
10 orm.RegisterDataBase("default", "mysql", "root:root@/orm_test?charset=utf8", maxIdle, maxConn)
SetMaxIdleConns
根据数据库的别名,设置数据库的最大空闲连接
orm.SetMaxIdleConns("default", 30)
SetMaxOpenConns
根据数据库的别名,设置数据库的最大数据库连接 (go >= 1.2)
orm.SetMaxOpenConns("default", 30)
注册模型
如果使用 orm.QuerySeter 进行高级查询的话,这个是必须的。
package main
import "github.com/astaxie/beego/orm"
type User struct {
Id int
Name string
}
func init(){
orm.RegisterModel(new(User))
}
RegisterModel 也可以同时注册多个 model
orm.RegisterModel(new(User), new(Profile), new(Post))
RegisterModelWithPrefix
使用表名前缀
orm.RegisterModelWithPrefix("prefix_", new(User))
beego设置自动创建表
1 //参数1 使用默认的数据库
2 //参数2 为true如果当前语句发送错误,则执行下一条语句
3 //参数3 为true表示打印建表和sql执行的信息
4 orm.RunSyncdb("default",false,true)
调试模式打印查询语句
1 orm.Debug = true
3、ORM 接口使用
1 //查询操作
2 func read(){
3 o := orm.NewOrm()
4 person := Person{Id:2}
5 err := o.Read(&person)
6 if err != nil {
7 fmt.Println("err=",err)
8 }
9 logs.Info("查询成功")
10 }
11
12 //插入操作
13 func insert(){
14 o := orm.NewOrm()
15 person := Person{Name:"朝阳",Age:19}
16 _,err := o.Insert(&person)
17 if err != nil {
18 fmt.Println("插入失败")
19 fmt.Println("err=",err)
20 }
21 }
22
23 //更新操作
24 func update(){
25 o := orm.NewOrm()
26 person := Person{Id:3,Name:"baihu",Age:20}
27 _,err := o.Update(&person)
28 if err != nil {
29 fmt.Println("err=",err)
30 }
31 fmt.Println("更新成功")
32
33 }
34
35 //删除操作
36 func delete(){
37 o := orm.NewOrm()
38 person := Person{Id:3}
39 n,err := o.Delete(&person)
40 if err != nil {
41 fmt.Println("err=",err)
42 }
43 fmt.Printf("成功删除%d条记录",n)
44 }