# 查詢條件方法
查詢和統計主要使用`Get`, `Find`, `Count`, `Rows`, `Iterate`這幾個方法,同時大部分函數在調用`Update`, `Delete`時也是可用的。在進行查詢時可以使用多個方法來形成查詢條件,條件函數如下:
* Alias(string)
給Table設定一個別名
~~~
engine.Alias("o").Where("o.name = ?", name).Get(&order)
~~~
* And(string, …interface{})
和Where函數中的條件基本相同,作為條件
~~~
engine.Where(...).And(...).Get(&order)
~~~
* Asc(…string)
指定字段名正序排序,可以組合
~~~
engine.Asc("id").Find(&orders)
~~~
* Desc(…string)
指定字段名逆序排序,可以組合
~~~
engine.Asc("id").Desc("time").Find(&orders)
~~~
* 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標記字段出現的順序賦值。
* Or(string, …interface{})
和Where函數中的條件基本相同,作為條件
* OrderBy(string)
按照指定的順序進行排序
* Select(string)
指定select語句的字段部分內容,例如:
~~~
engine.Select("a.*, (select name from b limit 1) as name").Find(&beans)
engine.Select("a.*, (select name from b limit 1) as name").Get(&bean)
~~~
* Where(string, …interface{})
和SQL中Where語句中的條件基本相同,作為條件
* 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").Get(&usr)
// SELECT age, name FROM user limit 1
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,interface{},string)
第一個參數為連接類型,當前支持INNER, LEFT OUTER, CROSS中的一個值, 第二個參數為string類型的表名,表對應的結構體指針或者為兩個值的[]string,表示表名和別名, 第三個參數為連接條件
* GroupBy(string)
Groupby的參數字符串
* Having(string)
Having的參數字符串
- xorm
- 創建Orm引擎
- 定義表結構體
- 名稱映射規則
- 前綴映射,后綴映射和緩存映射
- 使用Table和Tag改變名稱映射
- Column屬性定義
- 表結構操作
- 獲取數據庫信息
- 表操作
- 創建索引和唯一索引
- 同步數據庫結構
- 導入導出SQL腳本
- SqlMap及SqlTemplate模板
- 初始化SqlMap配置文件及SqlTemplate模板
- SqlMap及SqlTemplate相關功能API
- SqlMap配置文件及SqlTemplate模板加密存儲及解析
- 手動管理SqlMap配置及SqlTemplate模板
- 插入數據
- ORM方式插入數據
- 執行SQL命令插入數據
- 創建時間Created
- 查詢和統計數據
- ORM方式查詢和統計數據
- 查詢條件方法
- 臨時開關方法
- Get方法
- Find方法
- Join的使用
- Iterate方法
- Count方法
- Rows方法
- Sum系列方法
- Exist方法
- 子查詢
- 執行SQL查詢
- 執行SQL查詢的11種常用方式
- 查詢返回json或xml字符串
- 鏈式查詢據操返回某條記錄的某個字段的值
- SqlTemplateClient執行過程
- 關于數據庫分頁查詢
- 更新數據
- ORM方式更新數據
- Update方法
- 樂觀鎖Version
- 更新時間Updated
- 執行SQL命令更新數據
- 刪除數據
- ORM方式刪除數據
- Delete方法
- 軟刪除Deleted
- 執行SQL命令刪除數據
- 事務處理
- 簡單事務模型
- 嵌套事務模型
- 八種事務類型及事務傳播機制
- 簡單事務相關API
- 嵌套事務相關API
- 嵌套事務示例代碼
- 主從數據庫(Master/Slave)讀寫分離
- 創建引擎組
- 負載策略
- 引擎組其他配置方法
- 數據庫讀寫分離
- 批量混合SQL操作
- SQL Builder
- 緩存
- 事件
- 數據導出
- Dump數據庫結構和數據
- 查詢結果集導出csv、tsv、xml、json、xlsx、yaml、html
- 多Sheet頁數據導出
- 日志
- 連接池
- xorm 工具
- 常見問題
- 感謝支持