ConfigStore
最后更新:2025-07-02 22:45:23
|
状态:未完成
ConfigStore一般用来为AnylineService.query提供查询参数
简单的条件经常通过AnylineController.condition()返回,参数格式参考【约定格式】
复杂条件一般需要new DefaultConfigStore()然后调用and/or/condition等方法,
低代码平台、自定义查询条件等动态场景参考【ConfigStore与JSON互换】
遇到多层级的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 | 针对当前条件的所有条件 |