Fast Akash - SqlEngine Api - 使用手册

基础查询及应用

在本章节,您将学习sqlEngine在基础查询时的用法

  1. 初始化sqlEngine
	sqlEngine st = new sqlEngine();
  1. 指定主(查询)数据表
    /**
     * @param tableName  主数据表表名
     * @param alias	     主数据表别名(不填默认与表名一致)
     */
    //select * from bs_voice as b
	st.execute("bs_voice", "b");
  1. 设置查询结果字段(返回值)
    /**
     * @param appointTable   指定待查询的数据表别名
     * @param exAppointType  标记需要对数据执行特殊处理
     * 		DEF:默认 | PRIVACY_TEL:隐私字段,手机号 |  PRIVACY_IDCARD:隐私字段,身份证
     * 		DISTINCT:去重 | AVG: 平均值 | COUNTDIS: 行数,数据去重
     * 		COUNT:行数 | MAX:最大值 | MIN:最小值 | SUM:求和
     * @param appointColumns 字段以逗号隔开,如需指定别名可按照   原列名#列别名 进行设置  
     * 						 若为空,则视为查询当前表全部字段
     */
    // select b.*
	st.appointColumn("b", groupType.DEF, ""); 
	// select b.name as uname ...
	st.appointColumn("b", groupType.DEF, "name#uname,note#ucode");
  1. 设置查询条件(Where条件)
    /**
     * @param queryType			where条件关联类型
     * 		and:和  |  or: 或 
     * 		andMerge: 合并条件,以and开始 | orMerge:合并条件,以or开始
     * 		andMergeEnd:合并条件,以and结束  | orMergeEnd:合并条件,以or结束
     * 		合并条件最终呈现效果为:1=1 and (2=2 and 3=3 or 4=4)
     * @param table				查询需要使用的表别名
     * @param key				查询需要使用的表字段名(非特殊情况下,建议在字段名前加@)
     * @param conditionType		查询类型
     * 		EQ:等于  |  LIKE:模糊查询  | NOT_LIKE: 反向模糊查询
     * 		LIKE_BINARY:忽略中英文大小写匹配的模糊查询
     * 		LIKE_ESCAPE:支持通配符(转义)的模糊查询
     * 		NOT_LIKE_ESCAPE:支持通配符(转义)的反向模糊查询
     * 		LIKE_BINARY_ESCAPE:支持通配符(转义)并且忽略中英文大小写匹配的模糊查询
     * 		GT:大于 |  GTEQ:大于等于 | LT:小于  |  LTEQ:小于等于
     * 		NEQ:不等于 | IN:包含  | NOTIN: 不包含 |  ISNULL: 为空
     * 		NOTNULL:不为空 | QUERY_ROLE:调用函数方法(权限树匹配)
     * 		BET:在……区间,Between and……
     * @param exQueryType  		是否需要对当前字段进行特殊处理
     * 		DEF:默认 | PRIVACY_TEL:隐私字段,手机号 |  PRIVACY_IDCARD:隐私字段,身份证
     * 		DISTINCT:去重 | AVG: 平均值 | COUNTDIS: 行数,数据去重
     * 		COUNT:行数 | MAX:最大值 | MIN:最小值 | SUM:求和
     * @param value  			如果exCaseType不为null或DEF,则value入参格式为table||key!
     */
    // select * from u where u.state = 0
	st.queryBuild(queryType.and, "u", "@state", conditionType.EQ, groupType.DEF, "0");
	// select * from t where t.name like '%'+name+'%'
	st.queryBuild(queryType.and, "t", "@name", conditionType.LIKE, groupType.DEF, "%" + name + "%");
  1. 排序
    /**
     * @param table				查询需要使用的表别名
     * @param key				查询需要使用的表字段名
     * @param sortType			排序类型(正序:ASC,倒序:DESC,中文正序:UTF_ASC,中文倒序:UTF_DESC)
     */
    // select * from t order by t.staff_id desc
	st.dataSort("t","staff_id",sortType.DESC);
  1. 分页
    /**
     * @param pageNo   当前第几页动态参数
     * @param pageSize 每页查询/展示X条动态参数
     */
    // select * from t limit 0,10
	st.dataPaging("@0", "@10");
  1. 根据已有条件获取总行(条目)数
    // select count(1) from t
	st.selectTotal();
  1. 连表查询
    // select * from t left join sys_role u on u.id = t.rid
    /**
   	 * joinBuild : 初始化连表信息
     * @param joinTable  子表表名
     * @param joinAlias  子表别名
     * @param joinType	 关联类型
     * 		N:全连接(普通,以逗号隔开的那种)
     * 		R:左外联
     * 		L:右外链
     * 		C:join
     * 		I:inner join
     */
	st.joinBuild("sys_role", "u", joinType.L);
     
	/**
   	 * joinColunm: 主子表关系字段构造器(默认指定使用主表)
     * @param joinTable 所连接的主表表名
     * @param joinFrom  主表外键字段
     * @param joinTo    字表连接字段
     */
    st.joinColunm("u", "id", "t", "rid");
    
    /**
   	 *  表示并通知引擎本次连表已结束(*关键!)
     */
	st.joinFin()
  1. 分组
    /**
     * @param groupTable    需要分组的表别名
     * @param groupColumns	需要分组的表内字段,支持多字段,逗号隔开
     */
    // select * from t group by t.id
	st.groupBuild("t","id");
	/**
     * 分组:字段输出
     * 本方法等同于1.3 st.appointColumn("a", groupType.AVG, "a1,a2"); 
     * @param groupType  是否需要对字段做特殊处理
     * 		DEF:默认 | PRIVACY_TEL:隐私字段,手机号 |  PRIVACY_IDCARD:隐私字段,身份证
     * 		DISTINCT:去重 | AVG: 平均值 | COUNTDIS: 行数,数据去重
     * 		COUNT:行数 | MAX:最大值 | MIN:最小值 | SUM:求和
     * @param groupTable	主表别名
     * @param groupColumns	主表分组查询的字段
     */
 	st.groupColumn(groupType.AVG,"a","a1,a2");
  1. 查询结束
    /**
   	 *  表示并通知引擎本次查询已结束(*关键!)
   	 *  每一个sqlEngine最后都必须存在一个selectFin标记
     */
	st.selectFin("");

复杂查询及应用

在本章节,您将学习sqlEngine较为复杂的拓展用法

  1. Case When Then 条件构造器
	// select case when a.aa = aaa then 1 else 2 end as haha1
    /**
   	 * 初始化case构造器
     * @param caseAlias  a#b  code#注释 (当前构造器的名称及别名),无注释视为与名称一致
     */
	st.caseBuild("haha#haha1");
    /**
   	 * 初始化执行条件
     * 具体参数请参考1.4:查询条件
     */
    st.caseWhenQuery(queryType.and,"a","@aa",conditionType.EQ,groupType.DEF,"aaa");
    /**
   	 * 初始化执行条件输出结果 (每一个caseWhenQuery都需要有一个指定的caseThen)
     * @param  thenValue 	输出结果
     */
    st.caseThen("1");
   /**
   	 * 条件构造器结束标识
     * @param  elseValue   当前构造器默认输出(不符合其他条件的输出)
     */
    st.caseFin("2");
  1. 分组:Having聚合查询
   /**
   	 * 需要与groupBuild一起使用!(先有groupBuild再使用本api)
   	 * @param  groupType   聚合类型
     * @param  其他字段参数请参考1.4 where条件参数
     */
    // select * from t having avg(a1) = 0 group by a1 desc 
	st.groupHaving(groupType.AVG,queryType.and,"a","@a1",conditionType.EQ,"0");
  1. 子表关联查询
   当需要将一个sqlEngine作为子表使用时,可以参照以下示例:
   // 初始化作为子查询的sqlEngine
   // 最终输出结果: select * from t as t;
   sqlEngine child = new sqlEngine()
   		.execute("t", "t").selectFin("");
   // 初始化作为主查询的sqlEngine
   // 最终输出结果: select * from (select * from t as t) as a;
    sqlEngine st = new sqlEngine()
    	.executeChild(child,"a").selectFin("");
  1. 通过引擎无法实现的查询
   // 使用setSelect不需要加selectFin (特殊的用法)
   sqlEngine child = new sqlEngine()
   		.setSelect(" your sql ");

增删改相关应用

  1. 通过引擎无法实现的增删改查操作查询语句
   // 使用setExecute不需要加selectFin (特殊的用法)
   sqlEngine child = new sqlEngine()
   		.setExecute(" your sql ");
  1. 其他sql已兼容至baseApi,直接调用即可

版权声明:本文为qq_27047215原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。