### 查詢條件方法
查詢和統計主要使用`Get`, `Find`, `Count`, `Rows`, `Iterate`這幾個方法。在進行查詢時可以使用多個方法來形成查詢條件,條件函數如下:
- Id(interface{})傳入一個主鍵字段的值,作為查詢條件,如
~~~
var user User
engine.Id(1).Get(&user)
// SELECT * FROM user Where id = 1
~~~
如果是復合主鍵,則可以
~~~
engine.Id(core.PK{1, "name"}).Get(&user)
// SELECT * FROM user Where id =1 AND name= 'name'
~~~
傳入的兩個參數按照struct中pk標記字段出現的順序賦值。
-
Where(string, …interface{})和SQL中Where語句中的條件基本相同,作為條件
-
And(string, …interface{})和Where函數中的條件基本相同,作為條件
-
Or(string, …interface{})和Where函數中的條件基本相同,作為條件
-
Sql(string, …interface{})執行指定的Sql語句,并把結果映射到結構體
-
Asc(…string)指定字段名正序排序
-
Desc(…string)指定字段名逆序排序
-
OrderBy(string)按照指定的順序進行排序
-
In(string, …interface{})某字段在一些值中,這里需要注意必須是[]interface{}才可以展開,由于Go語言的限制,[]int64等不可以直接展開,而是通過傳遞一個slice。示例代碼如下:
~~~
engine.In("cloumn", 1, 2, 3).Find()
engine.In("column", []int{1, 2, 3}).Find()
~~~
-
Cols(…string)只查詢或更新某些指定的字段,默認是查詢所有映射的字段或者根據Update的第一個參數來判斷更新的字段。例如:
~~~
engine.Cols("age", "name").Find(&users)
// SELECT age, name FROM user
engine.Cols("age", "name").Update(&user)
// UPDATE user SET age=? AND name=?
~~~
-
AllCols()查詢或更新所有字段,一般與Update配合使用,因為默認Update只更新非0,非"",非bool的字段。
~~~
engine.AllCols().Id(1).Update(&user)
// UPDATE user SET name = ?, age =?, gender =? WHERE id = 1
~~~
-
MustCols(…string)某些字段必須更新,一般與Update配合使用。
-
Omit(...string)和cols相反,此函數指定排除某些指定的字段。注意:此方法和Cols方法不可同時使用。
~~~
// 例1:
engine.Omit("age", "gender").Update(&user)
// UPDATE user SET name = ? AND department = ?
// 例2:
engine.Omit("age, gender").Insert(&user)
// INSERT INTO user (name) values (?) // 這樣的話age和gender會給默認值
// 例3:
engine.Omit("age", "gender").Find(&users)
// SELECT name FROM user //只select除age和gender字段的其它字段
~~~
-
Distinct(…string)按照參數中指定的字段歸類結果。
~~~
engine.Distinct("age", "department").Find(&users)
// SELECT DISTINCT age, department FROM user
~~~
注意:當開啟了緩存時,此方法的調用將在當前查詢中禁用緩存。因為緩存系統當前依賴Id,而此時無法獲得Id
-
Table(nameOrStructPtr interface{})傳入表名稱或者結構體指針,如果傳入的是結構體指針,則按照IMapper的規則提取出表名
-
Limit(int, …int)限制獲取的數目,第一個參數為條數,第二個參數表示開始位置,如果不傳則為0
-
Top(int)相當于Limit(int, 0)
-
Join(string,string,string)第一個參數為連接類型,當前支持INNER, LEFT OUTER, CROSS中的一個值,第二個參數為表名,第三個參數為連接條件
詳細用法參見 [5.Join的使用](#)
-
GroupBy(string)Groupby的參數字符串
-
Having(string)Having的參數字符串