天天看点

Drools规则引擎语法样例分析(二)

基本的匹配规则

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() 
           

原文地址

继续阅读