欢迎光临散文网 会员登陆 & 注册

Drools-第一天

2021-03-18 16:03 作者:一个胖胖的程序猿  | 我要投稿

第一天记录:搭建基础项目,完成基本语法的学习。

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


Drools-第一天的评论 (共 条)

分享到微博请遵守国家法律