All Downloads are FREE. Search and download functionalities are using the official Maven repository.

edi.rule.model.JSRuleMatches Maven / Gradle / Ivy

The newest version!
package edi.rule.model;

import java.util.LinkedHashMap;
import java.util.List;
import edi.rule.annotation.JSRuleCheck;
import edi.rule.extend.interfaces.IJSRuleModel;
import lombok.Data;

/**
 * @author 摩拉克斯
 * @date 2022年3月29日 下午2:30:42
 * 

条件模型,用于解析where条件,其中包括等于,不等于,大于,小于,大于等于,小于等于,模糊查询,in查询(包含子查询等) */ @Data public final class JSRuleMatches implements IJSRuleModel{ /** *

等于条件,key为字段名,value为值数组,对值为null是否是字符串不敏感,保证有序 *

例子:"eq":{"ZsTestPO.test_field":["zzz",null]},表示test_field = 'zzz' and/or test_field is null * */ public LinkedHashMap eq; /** *

不等于条件,key为字段名,value为值数组,对值为null是否是字符串不敏感,保证有序 *

例子:"ne":{"view.ZsTestView.test_field":["zzz","null"]},表示test_field != 'zzz' and test_field is not null * */ public LinkedHashMap ne; /** *

in条件,key为字段名,value为值数组,对应的sql表示为 field in ('a','b'),保证有序 *

例子:"in":{"ZsTestPO.bonus":["asd"]} * */ public LinkedHashMap in; /** *

not in条件 *

例子:"ni":{"ZsTestPO.bonus":["asd"]} * */ public LinkedHashMap ni; /** *

模糊条件,key为字段名,value为值数组,值需要自行写%符号以优化索引操作,保证有序 *

例子:"li":{"view.ZsTestView.test_field":["%zzz%","bbb%"]} * */ public LinkedHashMap li; /** *

模糊条件的否定模式,not like *

例子:"nl":{"view.ZsTestView.test_field":["%zzz%","bbb%"]} * */ public LinkedHashMap nl; /** *

大于条件,key为字段名,value为值,对数值是否为字符串不敏感,保证有序 *

例子:"gt":{"ZsTestPO.bonus":22} * */ public LinkedHashMap gt; /** *

小于条件,key为字段名,value为值,对数值是否为字符串不敏感,保证有序 *

例子:"lt":{"ZsTestPO.bonus":"19"} * */ public LinkedHashMap lt; /** *

大于等于条件 *

例子:"ge":{"ZsTestPO.bonus":"10"} * */ public LinkedHashMap ge; /** *

小于等于条件 *

例子:"le":{"ZsTestPO.bonus":20} * */ public LinkedHashMap le; /** *

子查询模型,可以是一个类,也可以是一个视图,还可以是前面执行过的action产生的sql子查询 *

例子:"matches":{ "to":{ "in":{"ZsTestPO.test_field":{"action":"poAction"}, "ZsTestPO.id":{"view":"view.ZsTestView"}} } } * */ @JSRuleCheck public JSRuleToPointer to; /** *

括号bracket,表示条件组,与where后面的()括号含义相同,用于and or的条件关联 *

说明:当条件全为and或者全为or的时候是不需要加括号的,只有在and遇到or的变化时才需要加括号,例如:A and B or C,到这里就出现歧义了 *

可以分为(A and B) or C或者A and (B or C),所以需要加bracket,而bracket里面的条件表达式如果再次出现了不同则需要再加一个bracket *

同一个bracket下所有的表达式都为同一层,且同一层的逻辑相同,要么全是and要么全是or,如果我们把每一个括号定义为一个层面,那么没有括号的为第一层 *

第一层的条件关系为and,第二层为or,第三层又变成了and,所以根据这个逻辑,我们只需要在第一层也就是{@link JSRuleConditions#type}配置好即可 *

例子:"br":[ {"br":[ {"gt":{"ZsTestPO.bonus":"19"},"le":{"ZsTestPO.salary":"10.5"}} ] }, {"in":{"ZsTestPO.name":["qqq","xxx"]}}, {"br":[ {"like":{"view.ZsTestView.ohNo":["%v%"],"view.ZsTestView.test_field":["%zzz%"]}} ] } ] * */ public List br; }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy