1. 程式人生 > >beego框架圖文簡介五分鐘講解04-ORM框架操作資料庫

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)
}