beego-- [7]orm

beego orm使用流程:

0. 導(dǎo)入包

? ? orm? +? dbdriver
? ??"github.com/astaxie/beego/orm"? ? ? _ "github.com/go-sql-driver/mysql"

1. 注冊(cè)驅(qū)動(dòng)

? ? orm.RegisterDriver("mysql", orm.DRMySQL)? // 可省略

2. 注冊(cè)數(shù)據(jù)庫

? ?orm.RegisterDataBase("default", "mysql", dsn)

3. 定義數(shù)據(jù)模型

以UserModel為例:

type UserModel struct {
? ? ? ? ?ID ? ? ? ?int ? ? ? ?`orm:"column(id)"`
? ? ? ? ?Name ? ? ?string ? ? `orm:"size(64)" `
? ? ? ? ?Password ?string ? ? `orm:"size(1024)"`
? ? ? ? ?Gender ? ?string ? ? `orm:""`
? ? ? ? ?Height ? ?float32 ? ?`orm:""`
? ? ? ? ?Tel ? ? ? string ? ? `orm:""`
? ? ? ? ?Birthday ?*time.Time `orm:"type(date)"`
? ? ? ? ?CreatedAt *time.Time `orm:"auto_now_add"`
? ? ? ? ?UpdatedAt *time.Time `orm:"auto_now"`
? ? ? ? ?DeletedAt *time.Time `orm:"null"`
}

4. 注冊(cè)數(shù)據(jù)模型

? ?orm.RegisterModel(new(UserModel))

5. 操作
? ? ? ? ? ?(1)同步表結(jié)構(gòu)

模式1:RunCommand

? ? ? ? ? ? ? ? ? s1:orm.RunCommand()

? ? ? ? ? ? ? ? ? s2:命令行中使用 orm syncdb(包含多種命令)


使用命令行創(chuàng)建表

模式2:RunSyncdb

orm.RunSyncdb(name,force,verbose) //name: 數(shù)據(jù)庫別名;force: drop table 后再建表(true/false);verbose: 執(zhí)行打印過程(true/false)

使用程序創(chuàng)建表

??(2)數(shù)據(jù):增,刪,改,查

獲取數(shù)據(jù)庫連接:ormer := orm.NewOrm()

增加:ormer.insert(&User{.....})

刪除:ormer.delete(&User{ID:...})?

更新:ormer.Update(&User{ID:...},field1,field2...)??

查詢:ormer.Read(&User{....})? //查找時(shí),請(qǐng)確保所用字段或者多個(gè)字段組合為唯一的存在

結(jié)果集

? ? 方式1:querySet? :=? ormer.QueryTable(dbname) //不推薦使用,因?yàn)閐bname有可能會(huì)更改

? ?方式2:querySet? :=? ormer.QueryTable(&User{})

querySet.Count()? ?=> 查詢數(shù)據(jù)量

querySet.All(&users)? ? ?(var users []*User)? ?=> 查詢所有數(shù)據(jù)

querySet 中的where查詢:querySet.Filter(列名__條件,對(duì)象)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?條件:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (1)關(guān)系:=([i]exact),? <(lt),? >(gt),? >=(gte),? ?<=(lte)? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? in(in)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? like? %content%([i]contains)? start%([i]startwith)? %end([i]endwith)

queryset.Exclude(列名__條件,對(duì)象)? // 排除特定條件下的查詢結(jié)果

queryset.Limit(m).Offset(n).All(&users)? //分頁查詢:每頁m個(gè)

queryset.OrderBy(field_name).All(&users) // 按字段field_name升序排列

queryset.OrderBy(-field_name).All(&users) // 按字段field_name降序排列

queryset.OrderBy(field_name1,field_name2....).All(&users) // 按多個(gè)字段排列

queryset.OrderBy(field_name1,field_name2....).One(&users) // 只查一條數(shù)據(jù)出來

復(fù)雜的查詢條件:

orm.NewCondition()


【請(qǐng)驗(yàn)證】

使用querySeter(querySeter=new(QuerySet))進(jìn)行查詢條件時(shí)需要注意:

當(dāng)使用QueryTable獲取querySeter時(shí),再在querySeter進(jìn)行Filter查詢/SetCond查詢,必須是進(jìn)行整體的組合查詢,而不能單獨(dú)進(jìn)行查詢,以下用代碼解釋:

querySeter = orm.QueryTable(new(User))

querySeter = querySeter.Filter("name__exact", "Peter")

querySeter = querySeter.Filter("Job__exact", "Manger")

以上代碼最終的結(jié)果 ≠?querySeter = querySeter.Filter("name__exact", "Peter").Filter("Job__exact", "Manger") ( 多個(gè) Filter 之間使用 AND 連接 )

因?yàn)樽铋_始Filter查詢后,再次Filter,無法將上一次的查詢條件合并到第二次的查詢條件中


參考文章:

【0】?beedoc -- model 官方最權(quán)威

【1】使用beedb函式庫進(jìn)行ORM開發(fā)

【2】beego框架圖文簡(jiǎn)介講解 -- ORM框架

【3】beego中orm tag的使用

【4】beego/beedoc -- 關(guān)于orm使用的說明

【5】beego/beedoc -- QuerySeter的使用

【6】Beego ORM中QueryTable源碼 -- 475行? ? ? ? ? ?QuerySeter 接口源碼 -- 272行(請(qǐng)?jiān)斂矗綆纠a)

【7】beego ORM 高級(jí)查詢 + 原生SQL查詢

【8】ORM標(biāo)簽

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • beego orm是一個(gè)基于Go進(jìn)行ORM操作的庫,它采用了Go style方式對(duì)數(shù)據(jù)庫進(jìn)行操作,實(shí)現(xiàn)了struc...
    副班長(zhǎng)國(guó)偉閱讀 2,171評(píng)論 2 5
  • ORM官方文檔為:https://github.com/beego/beedoc/blob/master/zh-C...
    b77bb494e846閱讀 1,876評(píng)論 0 1
  • 1.類型相關(guān)內(nèi)容 在實(shí)現(xiàn)類型相關(guān)業(yè)務(wù)之前,我們先創(chuàng)建類型表。這里我們添加上一對(duì)多多對(duì)多的關(guān)系。 一個(gè)類型下面有很多...
    強(qiáng)某某閱讀 807評(píng)論 0 0
  • 一,beego簡(jiǎn)介 1,beego是一個(gè)go語言框架,可以用來快速開發(fā)API、Web、后端服務(wù)等各種應(yīng)用。2,be...
    henryspace閱讀 2,785評(píng)論 1 2
  • 3.2 ORM框架 Beego中內(nèi)嵌了ORM框架,用來操作數(shù)據(jù)庫。那么ORM框架是什么呢?ORM框架是Object...
    帶頭二哥閱讀 956評(píng)論 0 1

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