|版權聲明:本文爲博主原創文章,未經博主允許不得轉載。博客地址:https://blog.csdn.net/sgsgy5
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:123456@tcp(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:123456@tcp(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)
}