您的位置:首页 > 其它

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

2017-02-23 10:09 225 查看

基本的匹配规则

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)


原文地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  drools