基本的匹配规则
1.1变量
drools使用匹配的方式对Fact进行对比
找到credit值大于100的Account实例
$account Account($credit:Credit)
$account:Account(credit>)
Cosumer(account==$account)
找到Cosumer ,使得属性值account满足credit>100
1.2类型
支持各种java数据类型
String
正则
Customer(name matches "[A-Z][a-z]+")
Date:日期类型
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 + account.balance * ;
}
drl:
import ****.Account
import ****.calculateAcccount
rule "validation account"
when
$account : Account(balance > )
then
Account(balance == calculateAccount($account));
end
1.8方言
使用方言简化表达式
方言默认的是java,drools也支持mvel,在package的后面声明该规则文件使用的方言
mvel
一种基于java应用程序的表达式,支持属性与方法的直接访问
Bean属性
等同于
$customer.getAddress().setPostalCode("123")
访问List数据结构
$customer.accounts[]
等同于
$customer.getAccounts()
原文地址