QueryBuilder提供了一個簡單、流暢的SQL查詢構造器。在不影響代碼可讀性的前提下用來快速的創建SQL語句。mysql
QueryBuilder在功能上與ORM重合,可是個由利弊,ORM更適合用於簡單的CRUD操做,sql
而QueryBuilder更適用於複雜的查詢,例如查詢中包含子查詢和多重聯結。數據庫
使用示例:ui
// User 包裝了下面的查詢結果 type User struct { Name string Age int } var users []User // 獲取 QueryBuilder 對象. 須要指定數據庫驅動參數。 // 第二個返回值是錯誤對象,在這裏略過 qb, _ := orm.NewQueryBuilder("mysql") // 構建查詢對象 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) // 導出 SQL 語句 sql := qb.String() // 執行 SQL 語句 o := orm.NewOrm() o.Raw(sql, 20).QueryRows(&users)
完整API接口orm
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 }