在上一章节中,我们已经初步认识了SqlEngine中有关查询的方法及其写法。
如getPage和getSort基础配参项等等。
而在本章中,我们将更加深入去学习和了解有关复杂where条件的写法。
select Condition:Part B
首先,我们先来认识一下为我们提供对应服务的where家族的小伙伴们
- getWhereAnd
- getWhereOr
- getWhereAndMore
- getWhereAndMoreEnd
- getWhereOrMore
- getWhereOrMoreEnd
以上几个方法的入参项一致均为:(String key,String condition,Object val)
key:查询字段
condition:匹配类型
val:检索值
目前,condition字段共支持以下12种查询条件
EQ(" = "),//等于
LIKE(" LIKE "),//模糊查询
GT(" > "),//大于
GTEQ(" >= "),//大于等于
LT(" < "),//小于
LTEQ(" <= "),//小于等于
NEQ(" <> "),//不等于
IN(" IN "),//包含
NOTIN(" NOT IN "),//不包含
ISNULL(" IS NULL "),//为空
NOTNULL(" IS NOT NULL "),//不为空
BET(" BETWEEN ");//在……区间,Between and……
多余的我就不做赘述了,而对于前面两个方法,小伙伴们应该都不陌生了吧?
getWhereAnd:以AND方式拼装指定自定义查询条件
原型:
select * from where 1=1 and key condition value
示例(like):
select * from where 1=1 and name like '%张%'
getWhereAnd:以OR方式拼装指定自定义查询条件
原型:
select * from where 1=1 or key condition value
示例(like):
select * from where 1=1 or name like '%张%'
参考示例,相信很多小伙伴都可以轻松理解和掌握这两个方法的使用了吧?
很好,那我我们就要进入相对困难的部分了,做好准备~
①getWhereAndMore:以AND方式拼装自定义复合条件
②getWhereAndMoreEnd:以AND方式拼装并闭环自定义复合条件
③getWhereOrMore:以OR方式拼装自定义复合条件
④getWhereOrMoreEnd:以OR方式拼装并闭环自定义复合条件
复合条件是指将多个条件拼装组成一个条件来处理并返回结果的条件集合
听起来很头大?没关系,我们举个栗子。
需求是这样的,给到一个值1,需要查询在name/phone/text三个字段符合条件的数据,于是我们可以按下如下示例来写:
sel.getWhereAndMore("name","EQ","1")
.getWhereOr("phone","EQ","1")
.getWhereOrMoreEnd("text","EQ","1");
输出结果:select * from table where 1=1
and (name = '1' or phone = '1' or text = '1')
这样看是不是简单了一些?
很好,那么接下来就是重点了!
##若使用了getWhereAndMore或getWhereOrMore,则条件中必须!!要有对应的闭环方法如getWhereAndMoreEnd或getWhereOrMoreEnd!
有头一定要有尾。这点一定要记住哦。
组合方式一共有下列几种
- getWhereAndMore - getWhereAndMoreEnd:AND开AND闭
输出结果:select * from table where 1=1
and (name = '1' or phone = '1' and text = '1')
- getWhereAndMore - getWhereOrMoreEnd:AND开OR闭
输出结果:select * from table where 1=1
and (name = '1' or phone = '1' or text = '1')
- getWhereOrMore - getWhereAndMoreEnd:OR开AND闭
输出结果:select * from table where 1=1
or(name = '1' or phone = '1' and text = '1')
- getWhereOrMore - getWhereOrMoreEnd:OR开OR闭
输出结果:select * from table where 1=1
or (name = '1' or phone = '1' or text = '1')
虽然看着有些麻烦,但大家多练几遍,自然就得心应手了O(∩_∩)O~
重中之重!分组查询!
目前Spring A.S仅支持相对简单分组查询,如涉及到is case条件的话,就需要大家在拓展dao中创建了~但是这部分功能正在逐步开发中!大家可以小小的期待一下O(∩_∩)O
大家还记得上一章里的getSelCols方法吗?
这次,我们要用getSelCols及getWhere家族的小伙伴们来实现分组的相关功能。
sel.getSelCols(“”,“NAME,SUM||NAME#LUCK”)
.getWhereAnd("ISDELETE","EQ","0");
.getWhereAnd("SUM||NAME","GT","300");
输出结果:select name,sum(name) as luck from a where 1=1
and isdelete = 0 having sum(name) > 300
group by name
在使用分组时,几个注意点如下:
- getSelCols的第一个参数建议为空
- 在对分组字段进行处理时,字段格式如下 condition||colName#Alias [分组数据处理条件||字段名#输出别名]
- 若需要使用having条件,key值入参时需要使用condition||colName [分组数据处理条件||字段名]
如果有问题,可以直接在留言区留言~~我看到后会第一时间回复~