cn.schoolwow.quickdao.domain.database.dql.condition.Condition Maven / Gradle / Ivy
package cn.schoolwow.quickdao.domain.database.dql.condition;
import cn.schoolwow.quickdao.domain.database.dql.response.Response;
import cn.schoolwow.quickdao.domain.database.dql.subCondition.SubCondition;
import java.io.Serializable;
import java.util.Collection;
/**
* 查询接口
*
* 本接口定义单表查询接口,多表关联查询等方法
*
* 对于查询接口您需要知道以下几点
*
* - 实体类字段使用驼峰式命名映射到数据库中.例如字段firstName映射到数据库后字段名为first_name.
*
如您使用了@ColumnName注解则以该注解设置的字段为准
*
* - 对于关联查询,主表别名为t,使用join方法添加的子表按照添加顺序依次为t1,t2,t3......
*
如您使用了tableAliasName方法则以该方法设置的值为准
*
* 关联查询默认关联主表中唯一一个类型为子表的成员变量.
*
* Parent{
* long id;
* }
* Child{
* long id;
* long parentId;
* Parent parent;
* }
* //关联Child类的唯一一个子表成员变量的parent属性
* joinTable(Parent.class,"parentId","id").compositField();
*
* 若出现多个相同的子表成员变量,必须手动指定相应成员变量
*
* Parent{
* long id;
* }
* Child{
* long id;
* long fatherId;
* long motherId;
*
* Parent father;
* Parent mother;
* }
* //关联多个时需要手动指定
* joinTable(Parent.class,"fatherId","id","father").compositField();
* joinTable(Parent.class,"motherId","id","mother").compositField();
*
* 若需返回关联实体字段,必须调用compositField方法
*
* - 当您调用getArray方法,返回字段名称均为表别名_字段名.例如主表中的firstName字段,则返回字段名称为t_first_name
* - 对于直接添加查询语句的方法,请注意查询语句参数将直接拼接到sql字符上,不会做任何转义操作,请注意SQL注入等安全问题
*
*
*/
public interface Condition extends Serializable {
/**
* 设置主表别名
*
* @param tableAliasName 主表别名
*/
Condition tableAliasName(String tableAliasName);
/**
* 添加distinct关键字
*/
Condition distinct();
/**
* 添加空查询
*
* @param field 指明哪个字段为Null
*/
Condition addNullQuery(String field);
/**
* 添加非空查询
*
* @param field 指明哪个字段不为Null
*/
Condition addNotNullQuery(String field);
/**
* 添加空查询
*
* @param field 指明哪个字段不为空字符串
*/
Condition addEmptyQuery(String field);
/**
* 添加非空查询
*
* @param field 指明哪个字段不为空字符串
*/
Condition addNotEmptyQuery(String field);
/**
* 添加范围查询语句
*
* @param field 字段名
* @param inQuery 英文逗号隔开的字段值
*/
Condition addInQuery(String field, String inQuery);
/**
* 添加范围查询语句
*
* @param field 字段名
* @param values 指明在该范围内的值
*/
Condition addInQuery(String field, Object... values);
/**
* 添加范围查询语句
*
* @param field 字段名
* @param values 指明在该范围内的值
*/
Condition addInQuery(String field, Collection values);
/**
* 添加范围查询语句
*
* @param field 字段名
* @param inQuery 英文逗号隔开的字段值
*/
Condition addNotInQuery(String field, String inQuery);
/**
* 添加范围查询语句
*
* @param field 字段名
* @param values 指明在不该范围内的值
*/
Condition addNotInQuery(String field, Object... values);
/**
* 添加范围查询语句
*
* @param field 字段名
* @param values 指明在不该范围内的值
*/
Condition addNotInQuery(String field, Collection values);
/**
* 添加between语句
*
* @param field 字段名
* @param start 范围开始值
* @param end 范围结束值
*/
Condition addBetweenQuery(String field, Object start, Object end);
/**
* 添加Like查询
*
* @param field 字段名
* @param value 字段值
*/
Condition addLikeQuery(String field, Object value);
/**
* 添加Not Like查询
*
* @param field 字段名
* @param value 字段值
*/
Condition addNotLikeQuery(String field, Object value);
/**
* 添加字段查询
*
* @param field 字段名
* @param value 字段值
*/
Condition addQuery(String field, Object value);
/**
* 添加字段查询
*
* @param field 字段名
* @param operator 操作符,可为>,>=,=,<<=
* @param value 字段值
*/
Condition addQuery(String field, String operator, Object value);
/**
* 添加开闭区间字段查询
*
* @param field 字段名
* @param value 区间值,例如(1,100)或者[1,100]
*/
Condition addIntervalQuery(String field, String value);
/**
* 添加复杂集合查询
*
*
* 支持语法
* empty: 空查询
* not empty: 非空查询
* like: like查询
* not like: not like查询
* in: in查询
* not in: not in 查询
* interval: 开闭区间查询
* between: 范围查询
* gt: 大于
* gte: 大于等于
* lt: 小于
* lte: 小于等于
*
*
* @param field 字段名
* @param value 根据语法设置对应查询请求
*/
Condition addCompositeQuery(String field, String value);
/**
* 自定义查询语句,具体映射规则请看此{@link Condition}
*
* @param query 子查询条件,可使用?占位符
* @param parameterList 占位符参数列表,可为null
*/
Condition addRawQuery(String query, Object... parameterList);
/**
* 添加where子查询
*
* @param field 字段名
* @param subQuery 子查询语句
*/
Condition addSubQuery(String field, Condition subQuery);
/**
* 添加where子查询
*
* @param field 字段名
* @param operator 操作符,可为>,>=,=,<<=
* @param subQuery 子查询语句
*/
Condition addSubQuery(String field, String operator, Condition subQuery);
/**
* 添加exist子查询
*
* @param subQuery 子查询语句
*/
Condition addExistSubQuery(Condition subQuery);
/**
* 添加not exist子查询
*
* @param subQuery 子查询语句
*/
Condition addNotExistSubQuery(Condition subQuery);
/**
* 添加自定义字段,具体映射规则请看Condition类的JavaDoc注释
*
* @param fields 自定义查询列
*/
Condition addColumn(String... fields);
/**
* 添加自定义字段
* @param column 自定义字段
* @param columnAliasName 字段别名
*/
Condition addColumnAs(String column, String columnAliasName);
/**
* 添加主表字段
*/
Condition addTableColumn();
/**
* 排除指定字段
*
* @param excludeFields 指定主表排除字段
*/
Condition addExcludeColumn(String... excludeFields);
/**
* 设置返回列类型转换
*
* @param queryColumnTypeMapping 列类型转换函数,参数为列信息,返回列的类型
*/
Condition setColumnTypeMapping(QueryColumnTypeMapping queryColumnTypeMapping);
/**
* 设置返回列类型转换
* @param columnLabel 返回列名
* @param type 类型
*/
Condition setColumnTypeMap(String columnLabel, Class type);
/**
* 添加select子查询
*
* @param subQuery 子查询
*/
Condition addColumn(Condition subQuery);
/**
* 添加select子查询
*
* @param subQuery 子查询
* @param columnNameAlias 指定子查询返回列名的别名
*/
Condition addColumn(Condition subQuery, String columnNameAlias);
/**
* 添加更新字段,用于{@link Response#update()}方法
*
* @param field 待更新的字段
* @param value 待更新字段的值
*/
Condition addUpdate(String field, Object value);
/**
* 自定义更新语句
*
* @param update 更新语句,可使用?占位符
* @param parameterList 占位符参数列表,可为null
*/
Condition addRawUpdate(String update, Object... parameterList);
/**
* 添加or查询,具体映射规则请看此{@link Condition}
*
* @param or or查询语句,可使用?占位符
* @param parameterList 占位符参数值,无参数时可为null
*/
Condition or(String or, Object... parameterList);
/**
* 添加分组查询
*
* @param fields 分组字段
*/
Condition groupBy(String... fields);
/**
* 添加having查询
* 调用本方法时请先查看Condition类JavaDoc注释
*
* @param having having查询子句,可使用?占位符
* @param parameterList 占位符参数值
* @see Condition
*/
Condition having(String having, Object... parameterList);
/**
* 添加having子查询
* 调用本方法时请先查看Condition类JavaDoc注释
*
* @param field 字段名
* @param operator 操作符,可为>,>=,=,<<=
* @param subQuery 子查询语句
*/
Condition having(String field, String operator, Condition subQuery);
/**
* cross join 关联表,获取笛卡尔积
* 调用本方法时请先查看Condition类JavaDoc注释
*
* @param clazz 待关联的子表
*/
SubCondition crossJoinTable(Class clazz);
/**
* cross join 关联表,获取笛卡尔积
* 调用本方法时请先查看Condition类JavaDoc注释
*
* @param tableName 待关联的子表
*/
SubCondition, T> crossJoinTable(String tableName);
/**
* 关联表查询
* 调用本方法时请先查看Condition类JavaDoc注释
*
* @param clazz 待关联的子表
* @param primaryField 主表关联字段
* @param joinTableField 子表关联字段
*/
SubCondition joinTable(Class clazz, String primaryField, String joinTableField);
/**
* 关联表查询
* 调用本方法时请先查看Condition类JavaDoc注释
*
* @param clazz 待关联的子表
* @param primaryField 主表关联字段
* @param joinTableField 子表关联字段
* @param compositField 子表实体类成员变量名
*/
SubCondition joinTable(Class clazz, String primaryField, String joinTableField, String compositField);
/**
* 关联子查询
* 调用本方法时请先查看Condition类JavaDoc注释
* 调用本方法将在sql语句中拼接如下字符串
* join #{condition子表} as t1 on t.primaryField = t1.joinTableField
*
*
* @param joinCondition 关联Condition
* @param primaryField 主表关联字段
* @param joinConditionField 子查询关联字段
*/
SubCondition joinTable(Condition joinCondition, String primaryField, String joinConditionField);
/**
* 关联表查询
* 调用本方法时请先查看Condition类JavaDoc注释
* 调用本方法将在sql语句中拼接如下字符串
* join #{clazz} as t1 on t.primaryField = t1.joinTableField
*
*
* @param tableName 待关联的子表
* @param primaryField 主表关联字段
* @param joinTableField 子表关联字段
*/
SubCondition, T> joinTable(String tableName, String primaryField, String joinTableField);
/**
* 设置指定字段排序方式
*
* @param field 升序排列字段名
* @param asc 排序方式,值为asc或者desc
*/
Condition order(String field, String asc);
/**
* 根据指定字段升序排列
*
* @param field 升序排列字段名
*/
Condition orderBy(String... field);
/**
* 根据指定字段降序排列
*
* @param field 降序排列字段名
*/
Condition orderByDesc(String... field);
/**
* 手动指定排序
*
* @param orderBy 排序
*/
Condition orderByRaw(String orderBy);
/**
* 分页操作
* 请注意,oracle数据库调用分页方法后请直接执行execute方法
*
* @param offset 偏移量
* @param limit 返回个数
*/
Condition limit(long offset, long limit);
/**
* 分页操作
* 请注意,oracle数据库调用分页方法后请直接执行execute方法
*
* @param pageNum 第几页
* @param pageSize 每页个数
*/
Condition page(int pageNum, int pageSize);
/**
* 返回子表实体类字段信息
*
* @see {@link Condition#joinTable(Class, String, String)} ()}
* @see {@link Condition#joinTable(Class, String, String, String)} ()}
*/
Condition compositeField();
/**
* 获取lambdaCondition对象
*/
LambdaCondition lambdaCondition();
/**
* 执行并返回Response实例
*/
Response execute();
/**
* 执行并返回Response实例
*/
Condition clone();
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy