ConfigStore

最后更新:2024-01-11 13:50:24 | 状态:未完成

ConfigStore一般用来为AnylineService.query提供查询参数
简单的条件经常通过AnylineController.condition()返回,参数格式参考【约定格式
复杂条件一般需要new DefaultConfigStore()然后调用and/or/condition等方法,
低代码平台、自定义查询条件等动态场景务必要熟悉这个类,特别是condition(String join, Compare compare, String key, Object ... values)
遇到多层级的or,and同时出现的情况,参考【复杂条件合成

service.query("HR_USER", condition("NM:nm"));
ConfigStore configs = new DefaultConfigStore()
遇到复杂的查询条件时可以通过ConfigStore实现

 
//一般会生成key=value的查询条件,如果value是数组或集合并有多个值会生成 key IN(v1,v2)
public ConfigStore and(String key, Object value);

//通过compare来指定比较符号如于小,小于,等于,between等参考org.anyline.entity.Compare
//需要注意的是,如果需要构造in,not int, between条件,应该通过集合形式传参
public ConfigStore and(Compare compare, String key, Object value);

//如果value是一个集合则生成IN条件,否则与and作用相同 
public ConfigStore ands(String key, Object value);

另外还有 
public ConfigStore and(Config config);
public ConfigStore and(String key, Object value, boolean overCondition, boolean overValue);
public ConfigStore and(Compare compare, String key, Object value, boolean overCondition, boolean overValue);

overCondition:如果ConfigStore中已有相同key的条件,是否覆盖
overValue:在覆盖相key的条件时,是否覆盖当前条件的值,如果不覆盖则与原来的值合并生成集合,如果原来就是集合则在原集合上追加

对于FIND_IN_SET条件如果提交多个值会存在AND|OR的问题
所以Compare提供了FIND_IN_SET和FIND_IN_SET_AND和FIND_IN_SET_OR三个枚举
and(Compare.FIND_IN_SET,"TYPES","1") 生成SQL WHERE FIND_IN_SET('1', TYPES)
and(Compare.FIND_IN_SET_AND,"TYPES","1,2,3".split(",")) 生成SQL WHERE FIND_IN_SET('1', TYPES) AND FIND_IN_SET('2', TYPES) AND FIND_IN_SET('3', TYPES)
and(Compare.FIND_IN_SET,"TYPES","1") 生成SQL WHERE FIND_IN_SET('1', TYPES) OR FIND_IN_SET('2', TYPES) OR FIND_IN_SET('3', TYPES)

对于XML格式自定义的SQL:
//这里同时提供key与var用来对应自定义SQL查询条件中的id与标签体中的变量
public ConfigStore and(String key, String var, Object value);
如
<condition id="USER_AGE">AGE>{AGE_FR} AND AGE<{AGE_TO}</condition>//注意标签体中XML符号应该转义
and("USER_AGE","AGE_FR","10").and("USER_AGE","AGE_TO","20");  生成对应的SQL:WHERE AGE>10 AND AGE<20 

以上and()参数格式同样适用用or()和ors()
关于or与ors的区别:
or只针对当前条件的前一个条件
条件1 AND 条件2 这时调用or(条件3)会生成 条件1 AND (条件2 OR 条件3)

ors针对当前条件之前的所有条件
条件1 AND 条件2 这时调用ors(条件3)会生成 (条件1 AND 条件2) OR 条件3

Compare提供的枚举值
EQUAL:等于
GREAT:大于 
GREAT_EQUAL:大于等于 
LESS_EQUAL:小于等于 
IN:IN 
LIKE:%like%
LIKE_PREFIX:相当于start with
LIKE_SUFFIX:相当于end with
FIND_IN_SET:FIND_IN_SET
FIND_IN_SET_OR:FIND_IN_SET 如果有多个值以OR连接
FIND_IN_SET_AND:FIND_IN_SET 如果有多个值以AND连接
BETWEEN:区间
NOT_EQUAL:不等于
NOT_IN:不包含
常用格式
  JAVA SQL 说明
1 and("AGE","1") AGE = 1 默认Compare.EQUAL,如果有多个参数值与ands效果一样
2 ands("TYPE","1","2","3") TYPE IN('1','2','3') 默认Compare.IN,如果只有一个参数值与and效果一样
3 and(Compare.LESS, "AGE", "20") AGE < 20
4 and(Compare.LIKE, "NM", "张") NM LIKE '%张%'
5 and(Compare.LIKE_PREFIX, "NM", "张")  NM LIKE '张%' 或 and(Compare.START_WITH, "NM", "张")
6 and(Compare.FIND_IN_SET, "TYPES", "1") FIND_IN_SET('1', TYPES)
7 and(Compare.FIND_IN_SET, "TYPES", "1,2".split(",")) FIND_IN_SET('1', TYPES) OR FIND_IN_SET('2', TYPES)
传多个值时FIND_IN_SET默认与FIND_IN_SET_OR效果一样
8 and(Compare.FIND_IN_SET_AND, "TYPES", "1,2".split(",")) FIND_IN_SET('1', TYPES) AND FIND_IN_SET('2', TYPES) 类似于ALL,即同时包含1和2的数据
9 and(Compare.FIND_IN_SET_OR, "TYPES", "1,2".split(",")) FIND_IN_SET('1', TYPES) OR FIND_IN_SET('2', TYPES) 类似于ANY,即1和2只要包含其中任何一个的可以

以上and参数格式同样适用于or/ors()
10 or("AGE","1") 条件1 AND (条件2 OR AGE = 1) 只针对当前条件的前一个条件
11 ors("AGE", "1") (条件1 AND 条件2) OR AGE = 1 针对当前条件的所有条件
最近更新 搜索 提交