# 查询条件方法
查询和统计主要使用`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 工具
- 常见问题
- 感谢支持