All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.schoolwow.quickdao.domain.database.dql.condition.Condition Maven / Gradle / Ivy

There is a newer version: 5.3.1
Show newest version
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;

/**
 * 查询接口
 *
 * 

本接口定义单表查询接口,多表关联查询等方法

* *

对于查询接口您需要知道以下几点

*
    *
  1. 实体类字段使用驼峰式命名映射到数据库中.例如字段firstName映射到数据库后字段名为first_name. *
    如您使用了@ColumnName注解则以该注解设置的字段为准 *
  2. *
  3. 对于关联查询,主表别名为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方法

    *
  4. *
  5. 当您调用getArray方法,返回字段名称均为表别名_字段名.例如主表中的firstName字段,则返回字段名称为t_first_name
  6. *
  7. 对于直接添加查询语句的方法,请注意查询语句参数将直接拼接到sql字符上,不会做任何转义操作,请注意SQL注入等安全问题
  8. *
*

*/ 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 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 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