beego框架圖文簡介五分鐘講解04-ORM框架操作資料庫
|
2.10 ORM框架
Beego中內嵌了ORM框架,用來操作資料庫。那麼ORM框架是什麼呢?ORM框架是Object-RelationShip-Mapping的縮寫,中文叫物件關係對映,他們之間的關係,我們用圖來表示:
2.10.1 ORM初始化
-
首先要導包
import "github.com/astaxie/beego/orm"
-
然後要定義一個結構體
type User struct{ Id int Name string PassWord string }
思考:如果表名和欄位名為小寫會發生什麼結果?
注意觀察資料庫表中的欄位和結構體中的欄位是否一樣?
-
然後向資料庫中登錄檔,這一步又分為三步:
-
連線資料庫
用RegisterDataBase()函式,第一個引數為資料庫別名,也可以理解為資料庫的key值,專案中必須有且只能有一個別名為
default
的連線,第二個引數是資料庫驅動,這裡我們用的是MySQL資料庫,所以以MySQL驅動為例,第三個引數是連線字串,和傳統操作資料庫連線字串一樣,格式為:使用者名稱:密碼@tcp(ip:port)/資料庫名稱?編碼方式,程式碼如下:orm.RegisterDataBase("default","mysql","root:[email protected](127.0.0.1:3306)/class1?charset=utf8"
注意:ORM只能操作表,不能操作資料庫,所以我們連線的資料庫要提前在MySQL終端建立好。
-
註冊資料庫表
用orm.RegisterModel()函式,引數是結構體物件,如果有多個表,可以用 ,隔開,多new幾個物件:
orm.RegisterModel(new(User))
-
生成表
用orm.RunSyncdb()函式,這個函式有三個引數,
第一個引數是資料庫的別名和連線資料庫的第一個引數相對應。
第二個引數是是否強制更新,一般我們寫的都是false,如果寫true的話,每次專案編譯一次資料庫就會被清空一次,fasle的話會在資料庫發生重大改變(比如新增欄位)的時候更新資料庫。
第三個引數是用來說,生成表過程是否可見,如果我們寫成課件,那麼生成表的時候執行的SQL語句就會在終端看到。反之看不見。程式碼如下:
orm.RunSyncdb("default",false,true)
-
完整程式碼如下:
import "github.com/astaxie/beego/orm"
type User struct {
Id int
Name string
Passwd string
}
func init(){
//1.連線資料庫
orm.RegisterDataBase("default","mysql","root:[email protected](127.0.0.1:3306)/test?charset=utf8")
//2.登錄檔
orm.RegisterModel(new(User))
//3.生成表
//1.資料庫別名
//2.是否強制更新
//3.建立表過程是否可見
orm.RunSyncdb("default",false,true)
}
因為這裡我們把ORM初始化的程式碼放到了 models包的init()函式裡面,所以如果我們想讓他執行的話就需要在main.go裡面加入這麼一句程式碼:
import _ "classOne/models"
2.10.2 簡單的ORM增刪改查操作
在執行ORM的操作之前需要先把ORM包匯入,但是GoLand會自動幫我們導包,也可以手動導包
import "github.com/astaxie/beego/orm"
插入
-
先獲取一個ORM物件,用orm.NewOrm()即可獲得
o := orm.NewOrm()
-
定義一個要插入資料庫的結構體物件
var user User
-
給定義的物件賦值
user.Name = "xiaoming" user.Passwd = "xiaoming"
這裡不用給Id賦值,因為建表的時候我們沒有指定主鍵,ORM預設會以變數名為Id,型別為int的欄位當主鍵,至於如何指定主鍵,我們明天詳細介紹。
-
執行插入操作,o.Insert()插入,引數是結構體物件,返回值是插入的id和錯誤資訊。
id, err := o.Insert(&user) if err == nil { fmt.Println(id) }
查詢
-
也是要先獲得一個ORM物件
o := orm.NewOrm()
-
定義一個要獲取資料的結構體物件
var user User
-
給結構體物件賦值,相當於給查詢條件賦值
user.Name = "xiaoming"
-
查詢,用o.Read(),第一個引數是物件地址,第二個引數是指定查詢欄位,返回值只有錯誤資訊。
err := o.Read(&user,"Name") if err != nil{ beego.Info("查詢資料錯誤",err) return }
如果查詢欄位是查詢物件的主鍵的話,可以不用指定查詢欄位
更新
-
一樣的套路,先獲得ORM物件
o := orm.NewOrm()
-
定義一個要更新的結構體物件
var user User
-
給結構體物件賦值,相當於給查詢條件賦值
user.Name = "xiaoming"
-
查詢要更新的物件是否存在
err := o.Read(&user) if err != nil{ beego.Info("查詢資料錯誤",err) return }
-
如果查詢到了要更新的物件,就給這個物件賦新值
user.Passwd = "itheima"
-
執行更新操作,用o.Update()函式,引數是結構體物件指標,返回值是更新的條目數和錯誤資訊
count,err=o.Update(&user) if err != nil{ beego.Info("更新資料錯誤",err) return }
刪除
-
同樣的,獲取ORM物件,獲取要刪除的物件
o := orm.NewOrm() var user User
-
給刪除物件賦值,刪除的物件主鍵必須有值,如果主鍵沒值,就查詢一下。我們這裡直接給主鍵賦值。
user.Id = 1
-
執行刪除操作,用的方法是o.Delete(),引數是刪除的結構體物件,返回值是刪除的條目數和錯誤資訊
num, err := o.Delete(&User{Id: 1})
if err == nil {
fmt.Println(num)
}