beego構(gòu)造查詢

2023-11-20 18:07 更新

QueryBuilder 提供了一個(gè)簡(jiǎn)便,流暢的 SQL 查詢構(gòu)造器。在不影響代碼可讀性的前提下用來(lái)快速的建立 SQL 語(yǔ)句。

QueryBuilder 在功能上與 ORM 重合, 但是各有利弊。ORM 更適用于簡(jiǎn)單的 CRUD 操作,而 QueryBuilder 則更適用于復(fù)雜的查詢,例如查詢中包含子查詢和多重聯(lián)結(jié)。

使用方法:

// User 包裝了下面的查詢結(jié)果
type User struct {
    Name string
    Age  int
}
var users []User

// 獲取 QueryBuilder 對(duì)象. 需要指定數(shù)據(jù)庫(kù)驅(qū)動(dòng)參數(shù)。
// 第二個(gè)返回值是錯(cuò)誤對(duì)象,在這里略過(guò)
qb, _ := orm.NewQueryBuilder("mysql")

// 構(gòu)建查詢對(duì)象
qb.Select("user.name",
    "profile.age").
    From("user").
    InnerJoin("profile").On("user.id_user = profile.fk_user").
    Where("age > ?").
    OrderBy("name").Desc().
    Limit(10).Offset(0)

// 導(dǎo)出 SQL 語(yǔ)句
sql := qb.String()

// 執(zhí)行 SQL 語(yǔ)句
o := orm.NewOrm()
o.Raw(sql, 20).QueryRows(&users)

完整 API 接口:

type QueryBuilder interface {
    Select(fields ...string) QueryBuilder
    From(tables ...string) QueryBuilder
    InnerJoin(table string) QueryBuilder
    LeftJoin(table string) QueryBuilder
    RightJoin(table string) QueryBuilder
    On(cond string) QueryBuilder
    Where(cond string) QueryBuilder
    And(cond string) QueryBuilder
    Or(cond string) QueryBuilder
    In(vals ...string) QueryBuilder
    OrderBy(fields ...string) QueryBuilder
    Asc() QueryBuilder
    Desc() QueryBuilder
    Limit(limit int) QueryBuilder
    Offset(offset int) QueryBuilder
    GroupBy(fields ...string) QueryBuilder
    Having(cond string) QueryBuilder
    Subquery(sub string, alias string) string
    String() string
}
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)