ConfigStore
最后更新:2024-09-09 18:26:03
|
状态:未完成
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 | 针对当前条件的所有条件 |