Drools高级用法
*参考b站黑马博学谷Drools视频,侵权请联系删除 *
1.global全局变量
global关键字用于在规则文件中定义全局变量,它可以让应用程序的对象在规则文件中能够被访问。
可以用来为规则文件提供数据或服务语法结构为: global 对象类型 对象名称。
在使用global定义的全局变量时有两点需要注意:
- 如果对象类型为包装类型时,在一个规则中改变了global的值,那么只针对当前规则有效,对其他规则中的global不会有影响。可以理解为它是当前规则代码中的global副本,规则内部修改不会影响全局的使用。
- 如果对象类型为集合类型或JavaBean时,在一个规则中改变了global的值,对java代码和所有规则都有效。
2.query查询
query查询提供了一种查询working memory中符合约束条件的Fact对象的简单方法。它仅包含规则文件中的LHS部分,不用指定"when"和"then"部分并且以end结束。具体语法结构如下:

然后可以在java代码中通过session.getQueryResults("查询名称")或session.getQueryResults("查询名称", 查询参数)来得到查询结果。
3.function函数
function关键字用于在规则文件中(规则外)定义函数,就相当于java类中的方法一样,可以在规则体中调用定义的函数。使用函数的好处是可以将业务逻辑集中放置在一个地方,根据需要可以对函数进行修改。

4.LHS加强
在规则体中的LHS部分是介于when和then之间的部分,主要用于模式匹配,只有匹配结果为true时,才会触发RHS部分的执行。本节学习几个新的用法。
- 4.1 复合值限制 in / not in
复合值限制是指超过一种匹配值的限制条件,类似于SQL语句中的in关键字。Drools规则体中的LHS部分可以使用in或者not in进行复合值的匹配。具体语法结构如下:

- 4.2 条件元素eval
eval用于规则体的LHS部分,并返回一个Boolean类型的值。语法结构如下:

- 4.3 条件元素not
not用于判断Working Memory中是否存在某个Fact对象,如果不存在则返回true,如果存在则返回false,语法结构如下:

- 4.4 条件元素exists
exists的作用与not相反,用于判断Working Memory中是否存在某个Fact对象,如果存在则返回true,不存在则返回false,语法结构如下:

加上exists和不加的区别:当向Working Memory中加入多个满足条件的Fact对象时,使用了exists的规则执行一次,不使用exists的规则会执行多次。
- 4.5 规则集成extends
规则之间可以使用extends关键字进行规则条件部分的继承,类似于java类之间的继承。

5.RHS加强
RHS部分是规则体的重要组成部分,当LHS部分的条件匹配成功后,对应的RHS部分就会触发执行。一般在RHS部分中需要进行业务处理,在RHS部分Drools为我们提供了一个内置对象,名称就是drools,本节介绍几个Drools对象提供的方法。
- 5.1 halt
halt方法的作用是立即终止后面所有规则的执行。

- 5.2 getWorkingMemory
getWorkingMemory方法的作用是返回工作内存对象。

拿到WorkingMemory对象后还能通过get方法进一步拿到更多的信息。
- 5.3 getRule
getRule方法的作用是返回规则对象。

6.规则文件编码规范

本文详细介绍了规则引擎Drools的高级用法,包括如何使用global定义全局变量,利用query进行查询,定义function以封装业务逻辑,以及LHS中的in/not in、eval、not、exists等加强用法。同时,文章还探讨了RHS的halt、getWorkingMemory和getRule等实用方法,最后提到了规则文件的编码规范。
647

被折叠的 条评论
为什么被折叠?



