天天看點

drools規則引擎基本文法(五)

1,Drools提供的比較操作符,如下表:

符号 說明
> 大于
< 小于
>= 大于等于
<= 小于等于
== 等于
!= 不等于
contains 檢查一個Fact對象的某個屬性值是否包含一個指定的對象值
not contains 檢查一個Fact對象的某個屬性值是否不包含一個指定的對象值
memberOf 判斷一個Fact對象的某個屬性是否在一個或多個集合中
not memberOf 判斷一個Fact對象的某個屬性是否不在一個或多個集合中
matches 判斷一個Fact對象的屬性是否與提供的标準的Java正規表達式進行比對
not matches 判斷一個Fact對象的屬性是否不與提供的标準的Java正規表達式進行比對

前6個比較操作符和Java中的完全相同,下面我們重點學習後6個比較操作符。

2,建立規則檔案

package rules;
import  com.dream21th.drools.study.demo3.Student;

rule "demo3_1"
    when
       $s:Student( age<10 && sex=="男")
    then
       System.out.println("觸發demo3_1:年齡小于"+$s.getAge());
       $s.setResult("觸發demo3_1:年齡小于"+$s.getAge());
end

rule "demo3_2"
    when
       $s:Student(subjects contains "國文")
    then
       System.out.println("觸發demo3_2:課程中包含國文");
end

rule "demo3_3"
    when
       $s:Student("英語" memberOf subjects)
    then
       System.out.println("觸發demo3_3:英語包含在課程中");
end

rule "demo3_4"
    when
       $s:Student(subjects not contains "自然")
    then
       System.out.println("觸發demo3_4:課程中不包含自然");
end

rule "demo3_5"
    when
       $s:Student("社會" not memberOf subjects)
    then
       System.out.println("觸發demo3_5:社會不包含在課程中");
end

rule "demo3_6"
    when
       $s:Student(name matches "李.*")
    then
       System.out.println("觸發demo3_6:名字以李開頭");
end

rule "demo3_7"
    when
       $s:Student(name not matches "張.*")
    then
       System.out.println("觸發demo3_6:名字不以張開頭");
end      

3,建立測試類

package com.dream21th.drools.study.demo3;

import org.junit.Test;
import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;

import java.util.Arrays;

/*
 * @Author dream21th
 **/
public class Demo3Test {

    @Test
    public void test1(){
        KieServices kieServices = KieServices.Factory.get();
        KieContainer kieClasspathContainer = kieServices.getKieClasspathContainer();
        //會話對象,用于和規則引擎互動
        KieSession kieSession = kieClasspathContainer.newKieSession();

        Student student= Student.builder().age(12).sex("男").subjects(Arrays.asList("國文","英語")).name("李明").build();
        kieSession.insert(student);

        //激活規則引擎,如果規則比對成功則執行規則
        kieSession.fireAllRules();

        System.out.println(student);
        //關閉會話
        kieSession.dispose();

    }

}
      

4,測試結果

觸發demo3_2:課程中包含國文

觸發demo3_3:英語包含在課程中

觸發demo3_4:課程中不包含自然

觸發demo3_5:社會不包含在課程中

觸發demo3_6:名字以李開頭

觸發demo3_6:名字不以張開頭

Student(name=李明, result=null, age=12, sex=男, subjects=[國文, 英語])

代碼位址: https://gitee.com/dream21th/drools-study