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 }