# 自定义通用SQL条件
平台使用可拓展的方式进行SQL条件构造,如: like
,gt
,lt
等。
# 平台内置SQL条件
termType | SQL | DSL | 说明 |
is 或者 eq | = | .is() | 等于 |
not | != | .not() | 不等于 |
gt | > | .gt() | 大于 |
lt | < | .lt() | 小于 |
gte | >= | .gte() | 大于等于 |
lte | <= | .lte() | 小于等于 |
like | like | .like() | 模糊匹配,需要自己将value拼接% |
nlike | not like | .notLike() | 同like |
in | in | .in() | 值可以为以下格式:1,2,3,4字符串以半角逗号分割。[1,2,3,4] 集合 |
nin | not in | .notIn() | 同in |
isnull | is null | .isNull() | 为null |
notnull | not null | .notNull() | 不为null |
empty | = '' | .isEmpty() | 为空字符 |
nempty | !='' | .notEmpty() | 不为空字符 |
btw | between | .between() | 在之间 |
nbtw | not between | .notBetween() | 不在之间 |
dev-group | exists(.....) | .where("deviceId$dev-group", groupId) | 按设备分组查询(Pro) |
dev-same-group | exists(.....) | .where("deviceId$dev-same-group", anotherDeviceId) | 查询同一个分组的设备,如果要包含此设备则使用:deviceId$dev-same-group$contains (Pro) |
dev-tag | exists(.....) | .where("deviceId$dev-tag", "tagKey:tagValue") | 按标签查询。支持格式: |
product-info | exists(.....) | .where("deviceId$product-info", "accessId is mqtt-server-gateway") | 根据产品信息查询设备数据,值 |
device-creator | exists(.....) | .where("id$device-creator", "1") | 根据设备创建者id查询。类似根据创建者ID查询的实现,详情见抽象类 |
dev-latest | exists(.....) | .where("id$dev-latest$productId", "temp > 10") | 根据设备最新的数据来查询设备或者与设备关联的数据。如: 查询温度大于30的设备列表 |
# 自定义SQL条件构造器
新建一个类,继承AbstractTermFragmentBuilder
。注解@Component
注入到spring。
@Component
public class CustomTermBuilder extends AbstractTermFragmentBuilder{
public CustomTermBuilder(){
//custom 为条件标识,就像like一样
super("custom","自定义查询条件");
}
public SqlFragments createFragments( String columnFullName, //列全名,查询条件对应的列名
RDBColumnMetadata column, //列元数据
Term term){ //条件
return PrepareSqlFragments.of()
.addSql("exists(select 1 from custom_table t where t.device_id =",columnFullName," and t.value = ?)")
.addParameter(term.getValue());
}
}
# 在后端通用CRUD中使用
repository.createQuery().where("deviceId$custom","1234").fetch();
# 在前端通用查询条件中使用
{
"where": "deviceId custom 1234"
}
或者
{
"terms":[
{
"column":"deviceId",
"termType":"custom",
"value":"1234"
}
]
}