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 }