基本的匹配规则
1.1变量
drools使用匹配的方式对Fact进行对比
account: Account(credit>100)
找到credit值大于100的Account实例
$account Account($credit:Credit)
$account:Account(credit>100)
Cosumer(account==$account)
找到Cosumer ,使得属性值account满足credit>100
1.2类型
支持各种java数据类型
String
Cosumer(name="Keyu")
正则
Customer(name matches "[A-Z][a-z]+")
Date:日期类型
Account(dateCreate > "01-Feb-2009")
Boolean:布尔类型
Transaction(isApprove == true)
Enum:枚举类型
Account(type == Account.Type.STUDENT)
1.3注释
与java相同 // # /* */
1.4包
与java相同
1.5导入
与java相同
注意“导入方法时之恩给你导入静态方法
1.6全局变量
global ReportFactory reportFactory;
1.7函数
规则文件中可以定义函数,也可以再外部类中定义static静态方法
java:
public static double calculateAccount(Account account) {
return 100 + account.balance * 1.2;
}
drl:
import ****.Account
import ****.calculateAcccount
rule "validation account"
when
$account : Account(balance > 100)
then
Account(balance == calculateAccount($account));
end
1.8方言
使用方言简化表达式
方言默认的是java,drools也支持mvel,在package的后面声明该规则文件使用的方言
dialect "mvel"
mvel
一种基于java应用程序的表达式,支持属性与方法的直接访问
Bean属性
$customer.address.postalCode = "123"
等同于
$customer.getAddress().setPostalCode("123")
访问List数据结构
$customer.accounts[3]
等同于
$customer.getAccounts(3)