Beego ORM的使用

什么是ORM?

對(duì)象關(guān)系映射(Object Relational Mapping,簡(jiǎn)稱ORM)模式是一種為了解決面向?qū)ο笈c關(guān)系數(shù)據(jù)庫(kù)存在的互不匹配的現(xiàn)象的技術(shù)。簡(jiǎn)單的說(shuō),ORM是通過(guò)使用描述對(duì)象和數(shù)據(jù)庫(kù)之間映射的元數(shù)據(jù),將程序中的對(duì)象自動(dòng)持久化到關(guān)系數(shù)據(jù)庫(kù)中

使用beego ORM有三步

第一步:在model里面構(gòu)造struct模型,并注冊(cè)模型

package main
import (
"github.com/astaxie/beego/orm"
)
type User struct {
Id          int
Name        string
}
func init() {
orm.RegisterModel(new(User))
}

第二部:將你需要使用的 driver 加入main.go中

import( _"github.com/go-sql-driver/mysql"
            _"github.com/lib/pq"
            _"github.com/mattn/go-sqlite3")

第三步:注冊(cè)驅(qū)動(dòng)和數(shù)據(jù)庫(kù)**

  1. 注冊(cè)驅(qū)動(dòng):orm.RegisterDriver("mysql", orm.DRMySQL) 如果是默認(rèn)的三個(gè)可以不寫(xiě)
  2. 注冊(cè)數(shù)據(jù)庫(kù):orm.RegisterDataBase("default", "mysql", "root:123456@/golang?charset=utf8") ////注冊(cè)一個(gè)別名為default的數(shù)據(jù)庫(kù)、驅(qū)動(dòng)名字、數(shù)據(jù)庫(kù)源
main.go
package main
import (
"fmt"
"github.com/astaxie/beego/orm"
_ "github.com/go-sql-driver/mysql"
)

func init() {
orm.RegisterDriver("mysql", orm.DRMySQL)    //可以不加
orm.RegisterDataBase("default", "mysql", "root:password@/databasename?charset=utf8")
//ORM 必須注冊(cè)一個(gè)別名為default的數(shù)據(jù)庫(kù),作為默認(rèn)使用。
}

func main() {
o := orm.NewOrm()  //new一個(gè)Orm,默認(rèn)使用名為default的數(shù)據(jù)庫(kù)
o.Using("default") // 你可以使用Using函數(shù)指定其他數(shù)據(jù)庫(kù)
user := new(User)
user.Name = "ztz"
fmt.Println(o.Insert(user))
}

自己寫(xiě)是不是很麻煩?bee為我們提供了人性化的工具,在使用beego框架時(shí),可以使用bee的工具,如:bee generate自動(dòng)化一鍵生成 model,router,controllers

bee generate appcode [-tables=""] [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"] [-level=3]

bee工具簡(jiǎn)介

但有一點(diǎn)要注意,在構(gòu)造好數(shù)據(jù)庫(kù)之后再使用generate工具,并且一個(gè)表中一定要有主鍵,不然生成的文件不是完整的。

接口使用:

type Ormer interface {
Read(interface{}, …string) error
ReadOrCreate(interface{}, string, …string) (bool, int64, error)
Insert(interface{}) (int64, error)
InsertMulti(int, interface{}) (int64, error)
Update(interface{}, …string) (int64, error)
Delete(interface{}) (int64, error)
LoadRelated(interface{}, string, …interface{}) (int64, error)
QueryM2M(interface{}, string) QueryM2Mer
QueryTable(interface{}) QuerySeter
Using(string) error
Begin() error
Commit() error
Rollback() error
Raw(string, …interface{}) RawSeter
Driver() Driver
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容