Drools-第一天
第一天记录:搭建基础项目,完成基本语法的学习。
maven方式引入jar包;
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-core</artifactId>
<version>6.4.0.Final</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
<version>6.4.0.Final</version>
</dependency>
创建resource/META-INF/kmodule.xml标准配置文件
<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
<!-- name:指定kbase的名称,可以任意;
packages:指定规则文件的目录;
default:指定当前kbase是否为默认;-->
<kbase name="rules" packages="rules">
<!-- name:指定ksession的名称,可以任意;
default:指定当前session是否为默认; -->
<ksession name="ksession-rules"/>
</kbase>
</kmodule>
创建作为载体的实体类(class)为载体类添加get,set方法;
在packages指定的规则文件目录下创建drl文件;
创建测试类进行创建;
Drools基础语法:
drl文件构成:
package:包名,逻辑上的空间;
import:用于导入;
global:全局变量;
function:自定义函数;
query:查询;
rule -- end:规则体;

规则体语法结构:
rule "ruleName"
attributes
when
LHS
then
RHS
end
rule:表示规则开始,规则的名称唯一;
attributes:规则属性,类似于变量;
when:if关键字,后面是规则的条件;
LHS(Left Hand Side):规则条件部分;
then:do关键字,后面是结果部分;
RHS(Right Hand Side):结果行动部分的通用名称;
end:表示规则结束;

Pattern模式匹配:
语法结构为:绑定变量名:Object--引入的类--(约束条件)
例:$user:User(name = 'wang')
在LHS中定义的变量名在RHS中就可以直接使用;
当内存中存在User类型的变量(类型约束)并且名字为wang(属性约束)时规则才激活;
绑定变量名也可以作用在属性上;
例:$user:User($username:name = 'wang')
多个pattern中可以使用and和or链接(默认and不写就是and)
$user:User($username:name = 'wang') and
$user:User(name = 'wang')

比较操作符:
>,<,>=,<=,==,!= 和java代码中意义相同
contains,not contains 包含和不包含;
Object(Field[Collection/Array] cotains value);
Object(Field[Collection/Array] not cotains value);
memberOf,not memberOf 是否在一个或多个集合中;
Object(Field memberOfvalue[Collection/Array]);
Object(Field not memberOfvalue[Collection/Array]);
matches,not matches 是否与提供的标准java正则表达式匹配;
Object(Field matches "正则表达式");
Object(Field not matches "正则表达式");

执行指定规则:
当我们只想从所有满足条件的规则中,执行某些指定的规则时需要修改java代码;
接口AgendaFilter作为指定激活规则的过滤器,实现子类可以写入到激活方法中。
包括:
RuleNameStartsWithAgendaFilter 头部相同的规则;
RuleNameEndsWithAgendaFilter 结尾相同的规则;
RuleNameEeualsWithAgendaFilter 全相同的规则;
RulenameMatchesAgendaFilter 满足正则表达式的规则;
RuleNameSerializationAgendaFilter 满足可序列化的规则;

Drools内置方法:
update:更新工作内存中的数据,实现相关规则的重新匹配;
drl中:then update(user);
insert:插入工作内存中的数据,实现相关规则的重新匹配;
drl中:then insert(new User('wang'));
retract:删除工作内存中的数据,实现相关规则的重新匹配;
drl中:then retract(user);
